这个JavaScript有问题

时间:2009-06-25 10:31:44

标签: 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中不起作用。为什么呢?

5 个答案:

答案 0 :(得分: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或更大   例如,2008年将返回108.

您添加的1900仅适用于Firefox。

简易解决方案:尝试使用getFullYear()

答案 1 :(得分:6)

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

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

答案 2 :(得分:4)

尝试:

var yr = dt.getFullYear();

答案 3 :(得分:4)

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

答案 4 :(得分:4)

getYear已弃用。请改用getFullYear