2009-06-25 5 views
2

J'ai développé un script pour vérifier que l'utilisateur a sélectionné un mois et une année valides pour la carte de crédit.Il ya quelque chose qui cloche avec ce 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; 
} 
} 

Ce script fonctionne bien dans FireFox mais ne fonctionne pas dans IE7. Pourquoi?

+0

Conseil: IE8 dispose d'outils de développement excelent pour le débogage javascript et d'autres problèmes. Aussi, vous pouvez tester votre page en mode IE7/Quirks aussi. – akarnokd

Répondre

10

Cela ne fonctionne pas car getYear() renvoie des résultats différents pour les différents navigateurs.

Internet Explorer:

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

Firefox:

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

1800 retours -100. * Renvoie une valeur de 100 ou plus pour les années supérieures ou égales à 2000. Par exemple, les rendements année 2008 108.

Votre ajout de 1900 est pertinente uniquement pour Firefox.

Solution facile: Essayez d'utiliser getFullYear()

4

Essayez:

var yr = dt.getFullYear(); 
6

Date.getYear() dépend navigateur. Dans Firefox, il renvoie le nombre d'années après 1900, dans IE, il renvoie l'année complète de 4 chiffres.

Date.getFullYear() renvoie l'année à 4 chiffres dans tous les navigateurs, vous devriez donc toujours l'utiliser à la place.

4

Essayez d'utiliser getFullYear() au lieu de getYear() - cela devrait fonctionner dans les deux. En outre, si vous utilisez getFullYear(), supprimez également la ligne "yr = yr + 1900"

Questions connexes