2011-06-15 48 views
0

我有一个JavaScript代码片断循环所有输入(表中的所有行),并且如果一个复选框在单行中被选中,它将检查所有行中的所有复选框。Javascript循环

其实我需要它在同一行中检查第二个复选框,并不是所有的行,所以我需要编辑的JavaScript代码段,在那里它增加

//loop through all inputs 
      for(i = 0; i < inputs.length; i++) 

<script type="text/javascript"> 
var mainchecked = false; 

    function checkAll() { 

     //get all input elements 
     var inputs = document.getElementsByTagName('input'); 

     //if the box is being checked 
     if(!mainchecked) { 

      //loop through all inputs 
      for(i = 0; i < inputs.length; i++) { 
       //does it have autocheck? 
       if(inputs[i].className == 'autocheck') { 
        //then check the box! 
        inputs[i].checked = "checked"; 
       } 
      } 
      mainchecked = true; 
     } else { 
      //box is being unchecked, uncheck everything 
      for(i = 0; i < inputs.length; i++) { 
       inputs[i].checked = ""; 
      } 
      mainchecked = false; 
     } 
    } 
</script> 
+0

你的问题到底是什么? – Mat 2011-06-15 19:20:28

+0

你能提供一个样本html页面吗? jsFiddle是一个很好的放置它的地方......我不明白为什么当你显然想按照你的问题循环遍历每一个复选框时你一次循环所有复选框。 – 2011-06-15 19:21:55

+2

你会考虑使用jQuery吗?它可以通过几行完成。 – justis 2011-06-15 19:28:07

回答

0

不要通过非循环所有输入,循环遍历表行并处理每行内的输入。以下代码假设该行的控制复选框位于该行内的第一个输入中,并且该功能适用​​的行中的所有其他复选框都将该类设置为“autocheck”;我将根据您的具体情况对您进行修改(例如,您可能需要检查是否type=="checkbox")。

我没有测试过这个,但它应该足够让你继续。

function checkAll(){ 
    var _rows = document.getElementById("yourTableID").rows; 
    var i, 
     j, 
     isChecked, 
     inputs; 

    for (i=0; i < _rows.length; i++) { 
     inputs = _rows[i].getElementsByTagName("input"); 
     isChecked = inputs[0].checked; 
     for (j=1; j < inputs.length; j++) { 
     if (inputs[j].className == "autocheck") { 
      inputs[j].checked = isChecked; 
     } 
     } 
    } 

} 

更新:在你的意见,你似乎是触发从控制复选框的onclick这个功能刚刚看到。如果是这样,那么你可以传递给复选框的引用,你的函数,然后仅处理该行是在如下:

<input ... onclick="checkAll(this);" ...> 

function checkAll(cb){ 
     var _row = cb.parentNode.parentNode, 
      j, 
      isChecked = cb.checked, 
      inputs; 

      inputs = _row.getElementsByTagName("input"); 
      for (j=0; j < inputs.length; j++) { 
      if (inputs[j].className == "autocheck") { 
       inputs[j].checked = isChecked; 
      } 
      } 
    } 

谷歌“MDC parentnode”获取更多信息。

+0

UPDATE,函数checkAll(cb)正是我所需要的。谢谢! – sloga 2011-06-17 17:30:16