Internet Explorer 7 - JavaScript не определен, не тестируется - PullRequest
2 голосов
/ 26 февраля 2009

У меня проблемы с некоторыми JS в IE7. Я тестирую, чтобы определить, назначен ли определенному объекту className (возможно, это объект HTMLElement из DOM).

Теперь, тестирование страницы в Firefox говорит мне, что да, переменная не определена (все мои тесты ниже делают Alert ().

В IE ни один из тестов не пройден, переменная присваивается в последнем операторе IF, и во время последнего Alert () IE проверяет ошибку «className is null or not object», основываясь на операторе fn_note.className .

Вот код:

        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); 

Пожалуйста, дайте мне знать, что я делаю неправильно. Я знаю, что это, наверное, что-то базовое, но я просто не вижу его в банкомате.

Заранее спасибо.

Ответы [ 2 ]

6 голосов
/ 26 февраля 2009

Я думаю, что то, что вы получаете от свойства, это не строка, а объект типа 'undefined'. Попробуйте это:

if (typeof(kids[l].className) == 'undefined') {
1 голос
/ 26 февраля 2009

Насколько я вижу, единственное, что вы действительно хотите знать , - это если в коллекции childNodes есть childNode с className 'fn-note'. Так что сделайте несколько более строгий тест:

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];
    }
}

Этого должно быть достаточно (не забудьте вырваться из тире в регулярном выражении).

...