jQuery改进了选择所有复选框的功能

时间:2012-05-04 00:25:38

标签: jquery checkbox

我有一个checkall脚本,通过复选框点击选中所有复选框。 目前它工作得很好,但我需要以相同的形式使用它的多个实例。所以我需要将其修改为仅定位最近的字段集。

这是工作代码,这里也是小提琴,http://jsfiddle.net/clintongreen/22w3B/

    $('.checkall').click(function () {
    var checked = $(this).data('checked');
    $('fieldset').find(':checkbox').attr('checked', !checked);
    $(this).data('checked', !checked);
});

这是我失败的尝试:

    $('.checkall').click(function () {
    var checked = $(this).data('checked');
    var next_set = $('fieldset').next();
    $(next_set).find(':checkbox').attr('checked', !checked);
    $(this).data('checked', !checked);
});

4 个答案:

答案 0 :(得分:1)

与原始尝试相比只有一行更改。

$('.checkall').click(function () {
    var checked = $(this).data('checked');
    $(this).parents('li').next().find(':checkbox').attr('checked', !checked);
    $(this).data('checked', !checked);
});

但为什么不直接给田野工作组设置自己的ID以使其不那么脆弱呢?

答案 1 :(得分:0)

您是否查看了JQUERY中的“nearest()”函数?

http://api.jquery.com/closest/

答案 2 :(得分:0)

使用.parents("li").next("fieldset")获取最近的字段集,并将其已选中的属性设置为“已选中”:

$(".checkall").click(function(){
    $("input[type='checkbox']",
        $(this).parents("li")
               .next("fieldset"))
    .attr("checked","checked");
});

答案 3 :(得分:0)

有多种方法可以做到这一点,但最简单的IMO是将“全选”复选框移动到字段集中,然后:

$('.select-all').change(function() {
  var new_value = this.checked;
  $(this).closest('fieldset').find('input:checkbox').each(function() {
    if (!$(this).hasClass('select-all')) {
      this.checked = new_value;
    }
  });
});