2009-06-25 185 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」行。