1

我有一个脚本,应该在选择祖先复选框时选择所有后代输入复选框。

见这里:http: //jsfiddle.net/zJPfR/

当顶层复选框被选中时,下面的所有复选框都被选中。如果您取消选中该复选框,则会删除选中的复选框。但是,如果您第二次尝试这样做,它就行不通了。

如果我不正确地处理这个问题,请告诉我。

大流士

        $('.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);          
        });
    });
4

3 回答 3

5

jQuery.attr只使用初始属性。使用.prop而不是.attr更改当前的 DOM。
cb.attr("checked",status);=>cb.prop("checked",status);

于 2013-02-21T15:27:02.737 回答
1

它应该是

$('.poSelect').click(function() {
    var receipts    = $(this).closest('.pohelpTbl').next('.expandBox').find(':checkbox');

    receipts.prop('checked', this.checked);
});

无需遍历每个receipts项目,您可以.prop()直接调用receipts.

演示:小提琴

于 2013-02-21T15:29:58.470 回答
0

选中属性的存在是显示要选中的复选框,而不是属性的值设置为真或假。

从此改变:

var cb = $(this);
cb.attr("checked",status);

对此:

var cb = $(this);
if (status){
    cb.attr("checked","checked");
}
else{
    cb.removeAttr("checked");
}
于 2013-02-21T15:29:43.460 回答