我尝试了几种不同的方法,但在选择所有方框后,无法取消选中或清除所有复选框的代码。最新代码看起来像......
$(".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;
});
};
})
答案 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);
});