getElementById在代码中返回null但在控制台中工作

问题描述:

我正在使用javascript从保存的值填充html表单。getElementById在代码中返回null但在控制台中工作

我必须检查一个复选框的表,所以我使用一个PHP脚本来生成一个js函数,我稍后执行。

for($i = 0; $i < count($day_pos) - 1; $i++) 
{ 
    if ($day_pos[$i + 1] - $day_pos[$i] > 7) 
    { 
     if ($day_pos[$i + 1] - $day_pos[$i] > 8) 
     { 
      echo ("document.getElementById(\"".$rdv_days[$i * 2]."\").checked = true;"); 
      echo ("\ndocument.getElementById(\"".$rdv_days[$i * 2 + 1]."\").checked = true;"); 
     } 
     else if ($uf_hours[$day_pos[$i] + 5] == "sur") 
     { 
      echo ("document.getElementById(\"".$rdv_days[$i * 2]."\").checked = true;"); 
     } 
     else 
     { 
      echo ("document.getElementById(\"".$rdv_days[$i * 2 + 1]."\").checked = true;"); 
     } 
    } 
    echo("\n"); 
} 

echo ("</script>"); 

此功能的一切都工作得很好。

$ rdv_days是一个包含复选框的所有ID的数组。

当我加载表单页面,它会引发我一个错误:

Uncaught TypeError: Cannot set property 'checked' of null

的错误是在哪里做的getElementById在我的js函数行。

但是,当我在chrome中使用调试器控制台时,会中断它在失败中的行并在控制台中评估表达式,它工作得很好。

我已经检查过,如果id的字符串不包含任何隐藏字符,它不会。

我真的不明白为什么它无法找到元素。

感谢您的时间

编辑:

这里是

document.getElementById("rdvMatLun3").checked = true; 
document.getElementById("rdvApLun3").checked = true; 

生成的代码(只是一个部分,该网页是4000线),这里是与后来关联的表在页面中

<td> 
<input type='checkbox' id='rdvMatLun3' name='rdvMatLun3' value='1'/>RDV</td> 
</td> 
+6

在执行JS代码的时间点,该元素很可能不存在。 – CBroe 2014-09-19 10:58:57

+0

不知道这可是试着给这里\ N'后''空间\ ndocument.getElementById' – karan3112 2014-09-19 11:00:17

+0

那我如何调用该函数: – Nowahe 2014-09-19 11:00:59

在文档正文结束前执行代码。它使你确信所有的网站数据完成加载。

(function() { 
    // your code here 

})(); 
</body> 
+1

为什么总是这样简单的事情jQuery? – rekire 2014-09-19 11:01:18

+0

而网页被加载,我设置了一堆列表的值,它正在工作,所以元素被加载 – Nowahe 2014-09-19 11:03:53

+1

@rekire,即_not_ jQuery ... – epoch 2014-09-19 11:08:31