如何在HTML中实现"全选"复选框?

use*_*094 206 html javascript checkbox selectall

我有一个带有多个复选框的HTML页面.

我需要一个名为"全选"的复选框.当我选中此复选框时,必须选中HTML页面中的所有复选框.我怎样才能做到这一点?

Can*_*der 297

<script language="JavaScript">
function toggle(source) {
  checkboxes = document.getElementsByName('foo');
  for(var checkbox in checkboxes)
    checkbox.checked = source.checked;
}
</script>

<input type="checkbox" onClick="toggle(this)" /> Toggle All<br/>

<input type="checkbox" name="foo" value="bar1"> Bar 1<br/>
<input type="checkbox" name="foo" value="bar2"> Bar 2<br/>
<input type="checkbox" name="foo" value="bar3"> Bar 3<br/>
<input type="checkbox" name="foo" value="bar4"> Bar 4<br/>
Run Code Online (Sandbox Code Playgroud)

更新:

for each...in构造似乎不起作用,至少在这种情况下,在Safari 5或Chrome 5中.此代码应该适用于所有浏览器:

function toggle(source) {
  checkboxes = document.getElementsByName('foo');
  for(var i=0, n=checkboxes.length;i<n;i++) {
    checkboxes[i].checked = source.checked;
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 切勿对集合或数组使用`for in` (3认同)
  • 好吧,由于我的编辑因某些原因被拒绝,我想我会在这里发表评论.不推荐使用for-each构造,**将不起作用!**你必须使用它的替换:`for(复选框的复选框)`. (2认同)

小智 116

使用jQuery:

// Listen for click on toggle checkbox
$('#select-all').click(function(event) {   
    if(this.checked) {
        // Iterate each checkbox
        $(':checkbox').each(function() {
            this.checked = true;                        
        });
    } else {
        $(':checkbox').each(function() {
            this.checked = false;                       
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

HTML:

<input type="checkbox" name="checkbox-1" id="checkbox-1" />
<input type="checkbox" name="checkbox-2" id="checkbox-2" />
<input type="checkbox" name="checkbox-3" id="checkbox-3" />

<!-- select all boxes -->
<input type="checkbox" name="select-all" id="select-all" />
Run Code Online (Sandbox Code Playgroud)

  • 我将添加一个else子句来处理取消选择用例,;-) .. else {//迭代每个复选框$(":checkbox").each(function(){this.checked = false;}); } (24认同)
  • 如果你想省略if和else并仍然处理取消选择你可以这样做:var state = this.checked; $(':checkbox').each(function(){this.checked = state;}); (4认同)

fia*_*jaf 81

我不确定有没有人用这种方式回答(使用jQuery):

  $( '#container .toggle-button' ).click( function () {
    $( '#container input[type="checkbox"]' ).prop('checked', this.checked)
  })
Run Code Online (Sandbox Code Playgroud)

它很干净,没有循环或if/else子句,可以作为魅力.

  • 仅三行,简单=&gt;易于理解,也可以取消选择。谢谢。 (4认同)

小智 60

要取消选择:

$('#select_all').click(function(event) {
  if(this.checked) {
      // Iterate each checkbox
      $(':checkbox').each(function() {
          this.checked = true;
      });
  }
  else {
    $(':checkbox').each(function() {
          this.checked = false;
      });
  }
});
Run Code Online (Sandbox Code Playgroud)

  • if和else不需要...只需使用`this.checked` (2认同)

Sum*_*mit 35

我很惊讶没有人提到过document.querySelectorAll().纯JavaScript解决方案,适用于IE9 +.

function toggle(source) {
    var checkboxes = document.querySelectorAll('input[type="checkbox"]');
    for (var i = 0; i < checkboxes.length; i++) {
        if (checkboxes[i] != source)
            checkboxes[i].checked = source.checked;
    }
}
Run Code Online (Sandbox Code Playgroud)
<input type="checkbox" onclick="toggle(this);" />Check all?<br />

<input type="checkbox" />Bar 1<br />
<input type="checkbox" />Bar 2<br />
<input type="checkbox" />Bar 3<br />
<input type="checkbox" />Bar 4<br />
Run Code Online (Sandbox Code Playgroud)

  • 这在 Chrome 中有效,但由于不同的原因我有很多复选框,所以我没有定位 'type="checkbox"',而是定位 'name="myobject"' 并且它也有效。 (2认同)
  • 这个答案比其他答案更容易在现有页面中实现。好工作。 (2认同)

mer*_*kli 16

演示http://jsfiddle.net/H37cb/

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js" /></script>

<script type="text/javascript">
$(document).ready(function(){

$('input[name="all"],input[name="title"]').bind('click', function(){
var status = $(this).is(':checked');
$('input[type="checkbox"]', $(this).parent('li')).attr('checked', status);
});

});
</script>




<div id="wrapper">
 <li style="margin-top: 20px">
  <input type="checkbox" name="all" id="all" /> <label for='all'>All</label>
  <ul>
   <li><input type="checkbox" name="title" id="title_1" /> <label for="title_1"><strong>Title 01</strong></label>
    <ul>
     <li><input type="checkbox" name="selected[]" id="box_1" value="1" /> <label for="box_1">Sub Title 01</label></li>
     <li><input type="checkbox" name="selected[]" id="box_2" value="2" /> <label for="box_2">Sub Title 02</label></li>
     <li><input type="checkbox" name="selected[]" id="box_3" value="3" /> <label for="box_3">Sub Title 03</label></li>
     <li><input type="checkbox" name="selected[]" id="box_4" value="4" /> <label for="box_4">Sub Title 04</label></li>
    </ul>
   </li>
  </ul>
  <ul>
   <li><input type="checkbox" name="title" id="title_2" /> <label for="title_2"><strong>Title 02</strong></label>
    <ul>
     <li><input type="checkbox" name="selected[]" id="box_5" value="5" /> <label for="box_5">Sub Title 05</label></li>
     <li><input type="checkbox" name="selected[]" id="box_6" value="6" /> <label for="box_6">Sub Title 06</label></li>
     <li><input type="checkbox" name="selected[]" id="box_7" value="7" /> <label for="box_7">Sub Title 07</label></li>
    </ul>
   </li>
  </ul>
 </li>
</div>
Run Code Online (Sandbox Code Playgroud)


p0r*_*che 10

稍微更改版本,检查和取消检查

$('#select-all').click(function(event) {
        var $that = $(this);
        $(':checkbox').each(function() {
            this.checked = $that.is(':checked');
        });
    });
Run Code Online (Sandbox Code Playgroud)


小智 10

当你打电话时document.getElementsByName("name"),你会得到一个Object.使用.item(index)遍历的所有项目Object

HTML:

<input type="checkbox" onclick="for(c in document.getElementsByName('rfile')) document.getElementsByName('rfile').item(c).checked = this.checked">

<input type=?"checkbox" name=?"rfile" value=?"/?cgi-bin/?">?
<input type=?"checkbox" name=?"rfile" value=?"/?includes/?">?
<input type=?"checkbox" name=?"rfile" value=?"/?misc/?">?
<input type=?"checkbox" name=?"rfile" value=?"/?modules/?">?
<input type=?"checkbox" name=?"rfile" value=?"/?profiles/?">?
<input type=?"checkbox" name=?"rfile" value=?"/?scripts/?">?
<input type=?"checkbox" name=?"rfile" value=?"/?sites/?">?
<input type=?"checkbox" name=?"rfile" value=?"/?stats/?">?
<input type=?"checkbox" name=?"rfile" value=?"/?themes/?">?
Run Code Online (Sandbox Code Playgroud)


Kar*_*nne 9

<html>

<head>
<script type="text/javascript">

    function do_this(){

        var checkboxes = document.getElementsByName('approve[]');
        var button = document.getElementById('toggle');

        if(button.value == 'select'){
            for (var i in checkboxes){
                checkboxes[i].checked = 'FALSE';
            }
            button.value = 'deselect'
        }else{
            for (var i in checkboxes){
                checkboxes[i].checked = '';
            }
            button.value = 'select';
        }
    }
</script>
</head>

<body>
<input type="checkbox" name="approve[]" value="1" />
<input type="checkbox" name="approve[]" value="2" />
<input type="checkbox" name="approve[]" value="3" />

<input type="button" id="toggle" value="select" onClick="do_this()" />
</body>

</html>
Run Code Online (Sandbox Code Playgroud)


Rom*_*kin 9

这相当简单:

const selectAllCheckboxes = () => {
  const checkboxes = document.querySelectorAll('input[type=checkbox]');
  checkboxes.forEach((cb) => { cb.checked = true; });
}
Run Code Online (Sandbox Code Playgroud)


小智 8

试试这个简单的JQuery:

$('#select-all').click(function(event) {
  if (this.checked) {
    $(':checkbox').prop('checked', true);
  } else {
    $(':checkbox').prop('checked', false);
  }
});
Run Code Online (Sandbox Code Playgroud)


Gio*_*esi 8

我的简单解决方案允许有选择地选择/取消选择表单给定部分中的所有复选框,同时为每个复选框使用不同的名称,以便在表单发布后可以轻松识别它们.

使用Javascript:

function setAllCheckboxes(divId, sourceCheckbox) {
    divElement = document.getElementById(divId);
    inputElements = divElement.getElementsByTagName('input');
    for (i = 0; i < inputElements.length; i++) {
        if (inputElements[i].type != 'checkbox')
            continue;
        inputElements[i].checked = sourceCheckbox.checked;
    }
}
Run Code Online (Sandbox Code Playgroud)

HTML示例:

<p><input onClick="setAllCheckboxes('actors', this);" type="checkbox" />All of them</p>
<div id="actors">
    <p><input type="checkbox" name="kevin" />Spacey, Kevin</p>
    <p><input type="checkbox" name="colin" />Firth, Colin</p>
    <p><input type="checkbox" name="scarlett" />Johansson, Scarlett</p>
</div>
Run Code Online (Sandbox Code Playgroud)

我希望你喜欢它!


小智 7

此示例使用本机JavaScript,其中复选框变量名称不同,即不是所有"foo".

<!DOCTYPE html>
<html>
<body>

<p>Toggling checkboxes</p>
<script>
function getcheckboxes() {
    var node_list = document.getElementsByTagName('input');
    var checkboxes = [];
    for (var i = 0; i < node_list.length; i++) 
    {
        var node = node_list[i];
        if (node.getAttribute('type') == 'checkbox') 
    {
            checkboxes.push(node);
        }
    } 
    return checkboxes;
}
function toggle(source) {
  checkboxes = getcheckboxes();
  for(var i=0, n=checkboxes.length;i<n;i++) 
  {
    checkboxes[i].checked = source.checked;
  }
}
</script>


<input type="checkbox" name="foo1" value="bar1"> Bar 1<br/>
<input type="checkbox" name="foo2" value="bar2"> Bar 2<br/>
<input type="checkbox" name="foo3" value="bar3"> Bar 3<br/>
<input type="checkbox" name="foo4" value="bar4"> Bar 4<br/>

<input type="checkbox" onClick="toggle(this)" /> Toggle All<br/>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

  • 您的`getcheckboxes`函数可以替换为`document.querySelectorAll('input [type = checkbox]');` (2认同)

Cog*_*gsy 6

JavaScript是你最好的选择.下面的链接给出了一个使用按钮来取消选择所有内容的示例.您可以尝试调整它以使用复选框,只需使用"选择所有"复选框'onClick属性.

Javascript函数检查或取消选中所有复选框

这个页面有一个更简单的例子

http://www.htmlcodetutorial.com/forms/_INPUT_onClick.html


khy*_*ylo 5

如果采用 jQuery 的最佳答案,请记住传递给单击函数的对象是 EventHandler,而不是原始的复选框对象。因此代码应修改如下。

超文本标记语言

<input type="checkbox" name="selectThemAll"/> Toggle All<br/>

<input type="checkbox" name="foo" value="bar1"> Bar 1<br/>
<input type="checkbox" name="foo" value="bar2"> Bar 2<br/>
<input type="checkbox" name="foo" value="bar3"> Bar 3<br/>
<input type="checkbox" name="foo" value="bar4"> Bar 4<br/>
Run Code Online (Sandbox Code Playgroud)

JavaScript

$(function() {
    jQuery("[name=selectThemAll]").click(function(source) { 
        checkboxes = jQuery("[name=foo]");
        for(var i in checkboxes){
            checkboxes[i].checked = source.target.checked;
        }
    });
})
Run Code Online (Sandbox Code Playgroud)