2009-03-27 5 views
3
function valid() 
{ 
    begin_checked = false; 
    end_checked = false; 

    alert("begin_checked: " +begin_checked); 
    alert("end_checked: " +end_checked); 

    if (document.dd.begin.checked.length == undefined || document.dd.end.checked.length == undefined) 
    { 
     alert("In undefined"); 
    } 

    alert("end"); 
} 

Lorsque l'instruction if est fausse, elle n'atteint jamais l'alerte ("end")? Quand c'est vrai, il s'exécute correctement. Pourquoi?javascript if instruction question

+0

Est-ce une coupe-coller mot à mot du code? – MarkusQ

+0

oui, j'ai commenté d'autres parties pour le débogage et je les ai juste supprimés ici –

+0

Vous recevez une erreur? Est-ce que tout le DOM jusqu'à document.dd.begin.checked existe? – feihtthief

Répondre

8

Il existe probablement une exception de pointeur NULL et vous n'avez pas d'erreurs de sortie dans votre navigateur.

Vous avez besoin de sortie pour vérifier:

alert(document); 
alert(document.dd); 
alert(document.dd.begin); 
alert(document.dd.begin.checked); 
alert(document.dd.end); 
alert(document.dd.end.checked); 

Si vous obtenez non défini parmi tous ceux, votre code ne sera pas exécuter correctement.

Editer: Aussi, les autres réponses ici ont toutes une bonne information. Lisez ceux aussi.

Edit2: Alternative - Entourez votre code dans un bloc try/catch et alerter l'erreur:

function valid(){ 

    try{ 
     begin_checked = false; 
     end_checked = false; 

     alert("begin_checked: " +begin_checked); 
     alert("end_checked: " +end_checked); 

     if (document.dd.begin.checked.length == undefined || document.dd.end.checked.length == undefined){ 
      alert("In undefined"); 
     } 

     alert("end"); 

    } catch (e) { 
     alert(e); 
    } 

} 
+0

ou vous pouvez utiliser un bloc try/catch, et alerter l'erreur – rampion

+0

Cela a également été suggéré, mais il a supprimé son message. –

+0

Est-ce que ce ne devrait pas être attraper (e) ne pas attraper (Exception e)? Je suis assez sûr que JS n'a pas de types d'exception nommés. – Powerlord

3

Y a-t-il des erreurs dans la console d'erreur de votre navigateur? Je suppose que c'est parce qu'il essaie d'évaluer une propriété qui n'existe pas, ce qui l'a fait échouer (ne jamais arriver au == undefined). Vous pouvez simplement vérifier que la propriété existe ou utiliser le typeof pour vérifier si elle est indéfinie.

if (!document.dd.begin.checked.length || !document.dd.end.checked.length) 
{ 
    alert("In undefined"); 
} 

if (typeof document.dd.begin.checked.length == 'undefined' || typeof document.dd.end.checked.length == 'undefined') 
{ 
    alert("In undefined"); 
} 
Questions connexes