document.getElementById ("items_" + i) равен нулю - PullRequest
0 голосов
/ 03 августа 2011

У меня есть следующий код:

<script type="text/javascript">
for(var i=1; i<=3; i++) {
    document.getElementById("items_"+i).checked=true;
}
</script>                   

Со следующим HTML

<input type="checkbox" id="items_1" name="myitems" value="1" />
<input type="checkbox" id="items_2" name="myitems" value="2" />
<input type="checkbox" id="items_3" name="myitems" value="3" />

я получаю сообщение об ошибке:

document.getElementById("items_" + i) is null.

Как исправитьэто?

Ответы [ 4 ]

9 голосов
/ 03 августа 2011

Первый индекс в вашем цикле for будет равен нулю.

Есть ли у вас элемент с идентификатором items_0?

Скорее всего, это является причиной вашей проблемы.Установите начальное значение i на 1

Во-вторых, вы хотите убедиться, что ваш код Javascript выполняется после загрузки DOM.

Я рекомендую вам изучить использование jQuery , поскольку это делает такие вещи намного проще.

1 голос
/ 03 августа 2011

Ваш код выглядит так, как будто его первая итерация указывает на i = 0, поэтому он пытается найти входной тег с идентификатором items_0.

Вот JSBin, который показывает, что код работает правильно:

http://jsbin.com/amonel/edit

0 голосов
/ 03 августа 2011
var VanillaRunOnDomReady = function() {
    // code to execute after DOM has loaded  
    for (var i = 1; i <= 3; i++) {        
        document.getElementById("items_" + i).checked = true;
    }  
}

var alreadyrunflag = 0;
if (document.addEventListener) {    
    document.addEventListener("DOMContentLoaded", function(){
        alreadyrunflag=1;
        VanillaRunOnDomReady();
    }, false);
}
else if (document.all && !window.opera) {
    document.write('<script type="text/javascript" id="contentloadtag" defer="defer" src="javascript:void(0)"><\/script>');

    var contentloadtag = document.getElementById("contentloadtag");

    contentloadtag.onreadystatechange=function(){
        if (this.readyState=="complete"){
            alreadyrunflag=1;
            VanillaRunOnDomReady();
        }
    }
}

window.onload = function(){
  setTimeout("if (!alreadyrunflag){VanillaRunOnDomReady}", 0);
}
0 голосов
/ 03 августа 2011

Я закончил, используя:

$('#items_'+i).attr("checked", true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...