2

Ich habe Probleme mit einigen JS in IE7. Ich prüfe, ob ein bestimmtes Objekt einen className (möglicherweise ein HTMLElement-Objekt aus dem DOM) zugewiesen hat.Internet Explorer 7 - Javascript 'undefined' nicht testen

Nun testen Sie die Seite in Firefox mir sagt, dass Ja, die Variable nicht definiert ist (alle meine Tests unten tun, um die Alert().

In IE keiner der Tests bestehen, wird die Variable auf die zugewiesene IF-Anweisung zuletzt, und während der letzten Alert() IE Futter eine „classname ist null oder kein Objekt“ Fehler, auf der Grundlage der fn_note.className Aussage

Hier ist der Code:.

 var fn_note; 
     var kids = area.childNodes; 
     for (var l = 0; l < kids.length; l++){ 
      //DEBUG check if the found var exists 
      if (kids[l].className == null){ 
       //then the className var doens't exist 
       alert ('the classsname for the following var is null: --'+kids[l]+'--'); 
      } 
      if (kids[l].className == undefined){ 
       //then the className var doens't exist 
       alert ('the classsname for the following var is undefined: --'+kids[l]+'--'); 
      }      
      if (kids[l].className == ''){ 
       //then the className var doens't exist 
       alert ('the classsname for the following var is an empty string: --'+kids[l]+'--'); 
      } 
      if (typeof kids[l].className === 'undefined'){ 
       //then the className var doens't exist 
       alert ('the classsname for the following var is NEW TYPEOF TEST: --'+kids[l]+'--'); 
      }      

      if (kids[l].className == 'fn-note') { /* (/fn-note$/).test(kids[l].className) IE doesn't really like regex. por supuesto */ 
       //we have found the div we want to hide 
       fn_note = kids[l];      
      } 
     }      
     alert('the clicked on className is '+area.className+'name of the found div is '+fn_note.className); 

Bitte lassen Sie mich wissen was ich falsch mache, ich kenne es wahrscheinlich einige Ding einfach, aber ich kann es einfach nicht ATM sehen.

Vielen Dank im Voraus.

+0

Nur auf IE7 getestet: http://jsbin.com/azoya/ Meldet eine leere Zeichenfolge. – strager

+0

testete es auch hier, leere Zeichenfolge als auch – eglasius

Antwort

1

Soweit ich das einzige, was sehen Sie wirklich wissen wollen ist, wenn es in der Sammlung ein childnodes childNode mit classname ‚fn-note‘ ist. So machen einen etwas rigorosen Test:

for (var l = 0; l < kids.length; l++){ 
    if (kids[l] 
     && kids[l].className 
     && kids[l].className.match(/fn\-note$/i)) { 
     fn_note = kids[l]; 
    } 
} 

Dies sollte ausreichend sein (Stört den Strich in der regexp Flucht).

6

Ich denke, dass was Sie von der Eigenschaft erhalten, ist keine Zeichenfolge, sondern ein Objekt des Typs 'undefined'. Versuchen Sie folgendes:

if (typeof(kids[l].className) == 'undefined') { 
+0

Dieser Code ist bereits im Beispiel – pope

+0

Nun, nicht genau. Dieser Code führt eine zusätzliche Typüberprüfung für den Typstring durch, die überhaupt nicht benötigt wird und tatsächlich Probleme verursachen kann. Es gibt einen Literaltyp und es gibt ein String-Objekt, und sie werden möglicherweise nicht als derselbe Typ ausgewertet. – Guffa

+0

danke für dich auch helfen. –

Verwandte Themen