【问题标题】:Javascript loopJavascript循环
【发布时间】:2011-06-15 19:15:10
【问题描述】:

我有一个 javascript sn-p 循环遍历所有输入(表中的所有行),如果在一行中选中一个复选框,它会检查所有行中的所有复选框。

我实际上需要它来检查同一行中的第二个复选框,而不是所有行,所以我需要编辑 javascript sn-p,它会在其中递增

//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>

【问题讨论】:

  • 你的问题到底是什么?
  • 你能提供一个示例html页面吗? jsFiddle 是一个放置它的好地方......我不明白为什么你要一次循环遍历所有复选框,而你显然想要循环遍历行中的每个复选框,根据你的问题。
  • 你会考虑使用 jQuery 吗?它可以在几行代码中完成。
  • 我不需要遍历所有,只需遍历每一行。 " ?> ' javascript:checkAll()' />";?> 
  • 在选中收藏夹的复选框时,它意味着您已读取该行,以便我希望它检查读取复选框,但仅在同一行中。我对 jQuery 持开放态度,但认为这将是 javascript 中的一个小修改。

标签: javascript loops increment


【解决方案1】:

不要循环遍历所有输入,循环遍历表格行并处理每一行中的输入。以下代码假定该行的控制复选框位于该行中的第一个输入中,并且该功能适用​​的该行中的所有其他复选框都将类设置为“自动检查”;我会留给您根据您的具体情况进行修改(例如,您可能需要检查是否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;
         }
      }
   }

}

更新:刚刚在您的 cmets 中看到您似乎是从控制复选框的 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 父节点”了解更多信息。

【讨论】:

  • UPDATE 函数 checkAll(cb) 正是我所需要的。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-19
  • 2015-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多