我有一个包含数千个复选框的表单,选中一个复选框后,我想选中它下面的所有复选框。 这有效:
<html>
<body>
<form name="myform">
<input type="checkbox" name="box1" onClick="redrawboxes(this);">1<br>
<input type="checkbox" name="box2" onClick="redrawboxes(this);">2<br>
...
</form>
</body>
</html>
<script>
function redrawboxes(obj){
//check all boxes below
var foundit=false;
for (e=0; e<document.myform.elements.length; e++){
if (foundit==false){ //search for checked obj
if(obj == document.myform.elements[e]){
foundit=true;
}
}else{ //continuing below checked box
if(obj.checked){ //are we checking or unchecking
document.myform.elements[e].checked = true;
}else{
document.myform.elements[e].checked = false;
}
}
}
}
</script>
但对于超过几千个框,IE 慢得令人无法接受。 (Firefox 工作正常。) 除了遍历整个列表之外,是否有更好的方法来找到原始框?
最佳答案
这两个 jQuery 建议都非常好。对于像这样的 DOM 争论,你最好使用一个好的库。
关于在表单上放置数千个复选框的可疑智慧的评论也很不错......
但是,如果您确实有充分的理由这样做,并且您不能使用 jQuery 或类似工具,那么这里有一个快速、直接的 JS 方法:
function redrawboxes(obj)
{
//check all boxes below
var next = obj;
while ( (next = next.nextSibling) )
{
if ( next.nodeName.toLowerCase() == "input"
&& next.type.toLowerCase() == "checkbox" )
next.checked = obj.checked;
}
}
已在 FF3、FF3.1、IE6、Chrome 1、Chromium 2 中测试
关于javascript - 在 Javascript 中查找对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/504899/