Javascript loop

Javascript loop

本文关键字:loop Javascript      更新时间:2023-09-26

我有一个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>

不要循环所有输入,循环表行并处理每行中的输入。以下代码假设该行的控制复选框位于该行中的第一个输入中,并且该功能所应用的行中的所有其他复选框都将类设置为"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"了解更多信息。