document.getElementById(“items_”+ i)为null

时间:2011-08-03 17:50:55

标签: javascript dom

我有以下代码:

<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 个答案:

答案 0 :(得分:9)

for循环中的第一个索引将为零。

您是否拥有ID为items_0的元素?

这可能是导致您出现问题的原因。将i的初始值设置为1

其次,您希望确保在加载DOM后执行您的Javascript代码。

我建议您使用jQuery进行调查,因为这样可以更轻松地完成这些事情。

答案 1 :(得分:1)

你的代码好像是第一次迭代指向i = 0所以它试图找到一个id为'items_0'的输入标签。

这是一个显示代码正常工作的JSBin:

http://jsbin.com/amonel/edit

答案 2 :(得分:0)

我最终使用了:

$('#items_'+i).attr("checked", true);

答案 3 :(得分:0)

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