2014-11-01 85 views
3

我在我的页面上有多个复选框和一个“全选”按钮。我想,当我按下选择按钮时,页面上的所有元素都将被检查。这是我的javascript代码尝试:在javascript中自动检查复选框

<script> 
 
    function selectall() { 
 
     for (var i = 0; i < document.getElementsByName("ch").length; i++) { 
 
      document.getElementsByName(ch[i]).checked = true; 
 
     } 
 
    } 
 
</script>

这里”是HTML:

<form action="analize.php" method="POST" enctype="multipart/form-data"> 
 
    <input type="button" onclick="selectall()" value="SELECT ALL" /> 
 
    <input type="checkbox" name="ch[]" value="a" align="MIDLE" /> 
 
    <input type="checkbox" name="ch[]" value="b" align="MIDLE" /> 
 
    <input type="checkbox" name="ch[]" value="c" align="MIDLE" /> 
 
</form>
但它不work.What是PR oblem?

+0

这是巨大的更高效的存储document.getElementsByName'的'结果和再利用返回的集合'document.getElementsByName(ch [i])。checked = true'会在每次迭代时重新获得它。另外,存储长度。因为它是一个实时集合,所以在检查之前必须在每次迭代中再次读取长度,因为它可能会发生变化。 – RobG 2014-11-01 12:30:41

回答

3

目标元素的name属性是ch[]而不是ch.getElementsByName(ch[i]) 应该是.getElementsByName('ch[]')[i]

for (var i = 0; i < document.getElementsByName("ch[]").length; i++) { 
    document.getElementsByName('ch[]')[i].checked = true; 
} 

你也可以缓存NodeList这比在每个迭代查询DOM更高效:

var nodeList = document.getElementsByName("ch[]"); 
for (var i = 0; i < nodeList.length; i++) { 
    nodeList[i].checked = true; 
} 
+0

谢谢,它工作! – 2014-11-01 11:43:02

+0

@sergiureznicencu你很欢迎! – undefined 2014-11-01 11:45:59

+0

@sergiureznicencu:请标记答案,如果它帮助你。很容易识别出最佳答案。 – BNN 2014-11-01 12:21:23