2017-02-09 35 views
1

我试图检查所有元素如果复选框输入类型,我试过不同的解决方案,但它没有工作,我知道这很简单,但我不知道什么是错的我的代码:如何检查所有复选框使用jQuery

<ul class="items"> 
    <li class="item checkall"> 
    <label> 
     <input type="checkbox" name="item[]" id="checkAll"> 
     <span></span> 
     <p>Check All Items</p> 
    </label> 
    </li> 
    <li class="item"> 
    <label> 
     <input type="checkbox" name="item[]" id="checkbox" value="1"> 
     <span></span> 
     <p>Learn HTML5.1</p> 
    </label> 
    </li> 
    <li class="item"> 
    <label> 
     <input type="checkbox" name="item[]" id="checkbox" value="2"> 
     <span></span> 
     <p>Learn PHP7</p> 
    </label> 
    </li> 
    <li class="item"> 
    <label> 
     <input type="checkbox" name="item[]" id="checkbox" value="4"> 
     <span></span> 
     <p>Program a Website</p> 
    </label> 
    </li> 
</ul> 

的jQuery:

$(".checkall").click(function() { 
    $('input:checkbox').not(this).prop('checked', this.checked); 
}); 
+0

首先使用class而不是id。 id必须是唯一的,并使用'#id'选择一个id和'.class'来选择一个类。如果你看起来更好,还有很多像你这样的其他问题http://stackoverflow.com/questions/18537609/jquery-checkbox-check-all; http://stackoverflow.com/questions/15504643/check-uncheck-all-checkboxes-with-another-single-checkbox-use-jquery – Alexis

+0

是的。这很简单。所以,我的问题是:如果你想检查所有复选框,为什么你需要'not(this)'语句? –

+0

使用'change'事件而不是'click' – Satpal

回答

4

id在一个HTML页面的每个元素必须是唯一的。所以要么保持unique id要么提供class代替checkbox代替idclass可以相同。没有与class保持唯一性。

附上click/change event.checkAllcheckbox已改为类在这里,而不是id并设置基于.checkAll复选框的选中属性的所有.checkbox财产。以下是摘录。

$(".checkAll").on('change',function(){ 
 
    $(".checkbox").prop('checked',$(this).is(":checked")); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<ul class="items"> 
 
    <li class="item checkall"> 
 
    <label> 
 
     <input type="checkbox" name="item[]" class="checkAll"> 
 
     <span></span> 
 
     <p>Check All Items</p> 
 
    </label> 
 
    </li> 
 
    <li class="item"> 
 
    <label> 
 
     <input type="checkbox" name="item[]" class="checkbox" value="1"> 
 
     <span></span> 
 
     <p>Learn HTML5.1</p> 
 
    </label> 
 
    </li> 
 
    <li class="item"> 
 
    <label> 
 
     <input type="checkbox" name="item[]" class="checkbox" value="2"> 
 
     <span></span> 
 
     <p>Learn PHP7</p> 
 
    </label> 
 
    </li> 
 
    <li class="item"> 
 
    <label> 
 
     <input type="checkbox" name="item[]" class="checkbox" value="4"> 
 
     <span></span> 
 
     <p>Program a Website</p> 
 
    </label> 
 
    </li> 
 
</ul>

0

更改您的JS这样的:

$(".checkall").click(function (e) { 
    $('input[type="checkbox"]').not(this).prop('checked', this.checked); 
}); 

并添加类到您的输入不li元素:

<input class="checkall" type="checkbox" name="item[]" id="checkAll"> 

这里是fiddle

0
$(".checkall").click(function (e) { 

    var list = $(e.target).parents('ul'); 
    $('li:gt(0) label input:checkbox',list).attr('checked', this.checked); 

}); 
+2

尽管这段代码可能会解决这个问题,包括* how *和* why的解释,这就解决了这个问题[真的有帮助](// meta.stackexchange.com/q/114762)来提高你的帖子的质量。请记住,你正在为将来的读者回答这个问题,而不仅仅是现在问的人!请编辑您的答案以添加解释,并指出适用的限制和假设。 –

+0

@TobySpeight当然,下次我会照顾这些东西。 – hdkhardik