[英]Jquery “select all” checkbox
一旦点击'全选'复选框,我试图选择页面上的所有复选框,我正在使用jquery,你可以在下面的链接中看到:
http://jsfiddle.net/priyam/K9P8A/
选择和取消选中所有复选框的代码是:
function selectAll() {
$('.selectedId').attr('checked', isChecked('selectall'));
}
function isChecked(checkboxId) {
var id = '#' + checkboxId;
return $(id).is(":checked");
}
在坚持了一天后,我仍然不确定为什么我不能让它工作。 请帮忙
你为什么不这样做? 它更清晰可读
$('#selectall').click(function () {
$('.selectedId').prop('checked', this.checked);
});
$('.selectedId').change(function () {
var check = ($('.selectedId').filter(":checked").length == $('.selectedId').length);
$('#selectall').prop("checked", check);
});
isChecked
功能 attr
来检查框 这是因为方法selectAll
在全局范围内是不可用的。
在左侧面板Frameworks and Extensions
的第二个下拉列表中,选择no -wrap head/body
它将正常工作。
选择默认onload
的原因是当选择onload
时,所有输入的脚本都包含在匿名函数中,如下所示。 它将使selectAll
函数成为匿名函数内的本地方法,因此使用全局作用域的onclick事件处理程序将无法访问导致Uncaught ReferenceError: selectAll is not defined
的方法Uncaught ReferenceError: selectAll is not defined
错误。
$(window).load(function(){
//Entered script
});
演示: 小提琴
更新但您可以将其简化为
$(function(){
$('#selectall').click(function(i, v){
$('.selectedId').prop('checked', this.checked);
});
var checkCount = $('.selectedId').length;
$('.selectedId').click(function(i, v){
$('#selectall').prop('checked',$('.selectedId:checked').length == checkCount)
});
});
并从输入元素中删除所有onclick
处理程序,如本演示中所示
用这个...
$('#selectall').on('click', function() {
$('.selectedId').attr('checked', $(this).is(":checked"));
});
看到这个DEMO
$(document).ready(function () {
$('#selectall').click(function () {
$('.selectedId').prop('checked', $(this).is(":checked"));
});
});
more Optimized
这应该为你做的伎俩。
$(document).ready(function () {
$('#selectall').click(function () {
var checked = $(this).is(':checked');
$('.selectedId').each(function () {
var checkBox = $(this);
if (checked) {
checkBox.prop('checked', true);
}
else {
checkBox.prop('checked', false);
}
});
});
});
JsFiddle http://jsfiddle.net/Ra3uL/
假设父复选框有一个mainselect类,所有子元素都有一个childselect类
然后选择父级将选择所有复选框,反之亦然,使用以下代码:
$('#mainselect').live('change',function(){
if($(this).attr('checked') == 'checked') {
$('.childselect').attr('checked','checked');
} else {
$('.childselect').removeAttr('checked');
}
});
$(函数(){
// add multiple select / deselect functionality
$("#selectall").click(function () {
$('.case').attr('checked', this.checked);
});
// if all checkbox are selected, check the selectall checkbox
// and viceversa
$(".case").click(function(){
if($(".case").length == $(".case:checked").length) {
$("#selectall").attr("checked", "checked");
} else {
$("#selectall").removeAttr("checked");
}
});
});
如果您的复选框具有与点击事件相关的特定处理,则对@letiagoalves解决方案进行小规模增强。 OP没有要求,但过去我不得不做的事情。 基本上,它不是直接设置每个从属复选框的checked属性,而是将每个从属复选框的已检查状态与selectall复选框进行比较,并对处于相反状态的复选框触发click事件。
$('#selectall').click(function () {
var parentState = $(this).prop('checked');
$('.selectedId').each(function() {
if ($(this).prop('checked') !== parentState) {
$(this).trigger("click");
}
});
});
您只需在select all复选框上将click函数添加到click事件:
$('#chk-all-items').click(selectAll);
然后这个功能应该足以选择全部或取消全部。
selectAll = function (event) {
var self = this;
$('.template-item-select').each(function () {
this.checked = self.checked;
});
}
更具体的解决方案
$(document).ready(function(){ $('#checkAll').on('click', function ( e ) { $('input[name="chck_box[]"]').prop('checked', $(this).is(':checked')); }); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <table> <thead> <th><input type="checkbox" id="checkAll"></th> <th>Name</th> <th>Last</th> </thead> <tbody> <tr> <td><input type="checkbox" name="chck_box[]" value="1"></td> <td>Joe</td> <td>Doe</td> </tr> <tr> <td><input type="checkbox" name="chck_box[]" value="2"></td> <td>John</td> <td>Smith</td> </tr> <tr> <td><input type="checkbox" name="chck_box[]" value="3"></td> <td>Bill</td> <td>White</td> </tr> </tbody> </table>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.