Использование typeof Javascript на элементах DOM для проверки неопределенности (проблема IE) - PullRequest
1 голос
/ 16 ноября 2010

Я хочу перебрать список элементов DOM (флажки) и продолжать, пока этот список определен.Это элементы 'c1r1', 'c1r2', 'c1r3' и т. Д. Как только я нажимаю на неопределенный элемент, я останавливаюсь.Кажется, проблема в использовании typeof с элементами DOM.

Вот код, вызывающий проблемы:

function domIsDefined(idString){
    alert(idString);
    var isItDefined = (typeof $(idString) != 'undefined');
    alert(isItDefined);
    return isItDefined;
}
...
for(i=1; domIsDefined('c1r' + i); i++){
    if($('c1r' + i).checked==true){
        // do stuff
    }
}

Суть проблемы заключается в следующей строке:

var isItDefined = (typeof $(idString) != 'undefined');

проблема, как я выяснил, заключается в том, что typeof $ (idString) всегда возвращает объект, независимо от того, определен он или нет.Есть ли хороший способ сделать что-то подобное?Я предполагаю, что я попытаюсь поймать и проверить свойство .checked рано, но это отвратительно.

Ответы [ 5 ]

5 голосов
/ 16 ноября 2010
function domIsDefined(idString){
    return !!document.getElementById(idString);
}
1 голос
/ 16 ноября 2010
if($("#id").length){}
1 голос
/ 16 ноября 2010

Проверьте длину массива. jQuery всегда возвращает экземпляр jquery с массивом соответствующих элементов.

$(idString).length > 0
1 голос
/ 16 ноября 2010

jQuery всегда возвращает объект (массив). Если элемент с таким идентификатором не найден, длина возвращаемого массива будет равна 0.

var isItDefined = ($(idString).length > 0);

Обновление: для прототипа вы должны проверить нулевое значение, чтобы увидеть, найден ли объект

var isItDefined = ($(idString) !== null);
0 голосов
/ 16 ноября 2010

$ () в jQuery всегда будет возвращать объект. Попробуйте вместо этого:

var isItDefined = (typeof document.getElementById(idString) != 'undefined');
...