无法清除Jquery中所有选中的复选框

时间:2016-02-10 20:49:57

标签: javascript jquery checkbox

我尝试了几种不同的方法,但在选择所有方框后,无法取消选中或清除所有复选框的代码。最新代码看起来像......

$(".select_all").click(function(){
    var state = ($(this).html() == "Select All") ? true : false;    
    $(this).html((state) ? "Clear" : "Select All");

    if ($(':checked').prop('checked', false)) {
        $(':checkbox').each(function() {
         this.checked = true;                      
        });
    } else {
        $(':checkbox').each(function() {
            this.checked = false;                      
        });                                      
    };                                           
})

3 个答案:

答案 0 :(得分:3)

如果我感觉不对,你需要这样的东西。请查看下面的代码段或JSFiddle

$(".select_all").click(function(){
  var state = $(this).html() == "Select All";
  $(this).html((state) ? "Clear" : "Select All");

  $('input:checkbox').prop('checked', state);        
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input type="checkbox" name="" id="">
<input type="checkbox" name="" id="">
<input type="checkbox" name="" id="">
<input type="checkbox" name="" id="">
<input type="checkbox" name="" id="">
<input type="checkbox" name="" id="">

<a href="#" class="select_all">Select All</a>

答案 1 :(得分:0)

根据可能的HTML,select_all元素可以是复选框或按钮或其他。我以为你是前两种可能性之一。

$(function () {
  $(".select_all").click(function(e){
    e.preventDefault();
    var state = ( $(this).html() == "Select All") ? true : false;
    $(this).html((state) ? "Clear" : "Select All");
    $(':checkbox').prop('checked', state);
  });
  
  $(".select_all1").click(function(e){
    var state = ( this.nextSibling.textContent == "Select All") ? true : false;
    $(':checkbox').prop('checked', state);
    this.nextSibling.textContent = (state) ? "Clear" : "Select All";
  });
});
<script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>

<form action="demo.asp">
    <input type="checkbox" name="vehicle" value="Bike"> I have a bike<br>
    <input type="checkbox" name="vehicle" value="Car"> I have a car<br>
    <input type="checkbox" name="vehicle" value="Truck"> I have a car<br>
    <input type="checkbox" class="select_all1" name="selectAll" value="selectAll">Select All<br>
    <input type="submit" value="Submit">
    <button class="select_all">Select All</button>
</form>

答案 2 :(得分:0)

每个复选框上的

$(':checked').prop('checked', false) 属性设置为false。它不会返回true/false,因此不能用作if中的条件。如果要测试是否没有复选框,请使用:

if ($(':checked').length == 0)

然后检查所有方框,你可以这样做:

$(':checkbox').prop('checked', true);

但根本没有必要进行这项检查;你已经确定它是选择全部还是清除函数顶部的state变量。

您不需要使用.each() - 当选择器匹配多个元素时,所有自动修改DOM循环的jQuery函数。

并且很少需要在三元组中使用? true : false - 你可以简单地使用之前的表达式作为布尔值。

所以完整的代码是:

$(".select_all").click(function(){
    var state = $(this).text() == "Select All";    
    $(this).text(state ? "Clear" : "Select All");
    $(':checkbox').prop('checked', !state);                               
});