2 Stimmen

Internet Explorer 7 - Javascript 'undefiniert' wird nicht getestet

Ich habe Probleme mit einigen JS im IE7. Ich teste, um zu sehen, wenn ein bestimmtes Objekt einen className (seine möglicherweise ein HTMLElement-Objekt aus dem DOM) zugewiesen hat.

Nun, Testen der Seite in Firefox sagt mir, dass Ja, die Variable undefiniert ist (alle meine Tests unten tun die Alert().

Im IE wird keiner der Tests bestanden, die Variable wird in der letzten IF-Anweisung zugewiesen, und während der letzten Alert() wirft der IE einen "className is null or not an object"-Fehler ein, der auf der fn_note.className Erklärung.

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 weiß, es ist wahrscheinlich etwas Grundlegendes, aber ich kann es einfach nicht sehen ATM.

Vielen Dank im Voraus.

6voto

Guffa Punkte 663241

Ich denke, dass Sie von der Eigenschaft keine Zeichenkette erhalten, sondern ein Objekt vom Typ "undefined". Versuchen Sie dies:

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

1voto

KooiInc Punkte 111454

Soweit ich sehen kann, ist das einzige, was Sie wirklich wissen wollen ist, ob es in der childNodes-Sammlung einen childNode mit dem className 'fn-note' gibt. Führen Sie also einen etwas strengeren Test durch:

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 ausreichen (achten Sie darauf, den Bindestrich in der Regexp zu entwerten).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X