2009-06-25 182 views
2

我开发了一个脚本来检查用户是否选择了信用卡的有效月份和年份。这段JavaScript有什么问题

function validatemonth() 
{ 
var dt = new Date(); 
var mth = dt.getMonth(); 
var yr = dt.getYear(); //this seems to return different data in different browsers 
yr = yr + 1900; 

if(eval(document.PurchaseCredit.cc_expire_month.value) < mth && eval(document.PurchaseCredit.cc_expire_year.value) == yr) 
{ 
    document.getElementById('error').innerHTML = "Expiry Date cannot be less than current date."; 
    document.forms['PurchaseCredit'].submit.disabled = true; 
} 
else 
{ 
    document.getElementById('error').innerHTML = ""; 
    document.forms['PurchaseCredit'].submit.disabled = false; 
} 
} 

该脚本在FireFox中运行良好,但在IE7中无效。为什么?

+0

提示:IE8具有外观极好的开发工具来调试JavaScript和其他问题。您也可以在IE7/Quirks模式下测试您的页面。 – akarnokd 2009-06-25 10:41:27

回答

10

它不工作,因为getYear()为不同的浏览器返回不同的结果。

Internet Explorer中:

* Returns four digits for years before 1900 and after 1999. 

火狐:

* Returns a value less than 0 for years before 1900. For example, the 

1800年收益-100。 *返回100或更高的年大于或等于2000年 例如,2008年全年收益108

你除了1900年是有关只适用于Firefox的值。

简单的解决方案:尝试使用和getFullYear()

4

尝试:

var yr = dt.getFullYear(); 
6

Date.getYear()是依赖于浏览器。在Firefox中,它返回1900年后的年数,在IE中返回完整的4位数年份。

Date.getFullYear()会在所有浏览器中返回4位数的年份,因此您应该始终使用它。

4

尝试使用getFullYear()而不是getYear() - 它应该在两者中都起作用。此外,如果使用getFullYear(),则还应删除“yr = yr + 1900”行。