当选择祖先复选框时,我有一个应该选择所有后代输入复选框的脚本。
见这里:http://jsfiddle.net/zJPfR/
选中顶级复选框后,将选中下方的所有复选框。如果取消选中该复选框,则会删除检查。但是,如果您再次尝试执行此操作,则无效。
如果我这样做不正确,请告诉我。
Darius
$('.poSelect').click(function() {
var expandBox = $(this).parents('.pohelpTbl').next('.expandBox');
var receipts = expandBox.find('input[type="checkbox"]');
if ($(this).is(':checked')) {
var status = true;
} else {
var status = false;
}
$(receipts).each(function (i) {
var cb = $(this);
cb.attr("checked",status);
});
});
答案 0 :(得分:4)
jQuery的.attr
仅使用初始属性。使用.prop
代替.attr
来更改当前的DOM。
cb.attr("checked",status);
=> cb.prop("checked",status);
答案 1 :(得分:1)
应该是
$('.poSelect').click(function() {
var receipts = $(this).closest('.pohelpTbl').next('.expandBox').find(':checkbox');
receipts.prop('checked', this.checked);
});
无需遍历每个receipts
项,您可以直接在.prop()
上致电receipts
。
演示:Fiddle
答案 2 :(得分:0)
checked属性的存在是显示要检查的复选框的内容,而不是属性的值被设置为true或false。
从此改变:
var cb = $(this);
cb.attr("checked",status);
到此:
var cb = $(this);
if (status){
cb.attr("checked","checked");
}
else{
cb.removeAttr("checked");
}