0

チェックボックスのクリックですべてのチェックボックスを選択するチェックオールスクリプトがあります。現在はうまく機能していますが、同じ形式で複数のインスタンスが必要です。したがって、最も近いフィールドセットのみをターゲットにするように変更する必要があります。

これが動作するコードであり、フィドルもここにあります、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

4 に答える 4

1

最初の試みから1行だけ変更します。

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

しかし、フィールドセットに独自のIDを与えて、脆弱性を大幅に減らしてはどうでしょうか。

于 2012-05-04T00:35:13.063 に答える
0

JQUERYの「closest()」関数を調べましたか?

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

于 2012-05-04T00:29:09.363 に答える
0

で最も近いフィールドセットを取得し、その.parents("li").next("fieldset")checked属性を「checked」に設定します。

$(".checkall").click(function(){
    $("input[type='checkbox']",
        $(this).parents("li")
               .next("fieldset"))
    .attr("checked","checked");
});
于 2012-05-04T00:29:35.720 に答える
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;
    }
  });
});
于 2012-05-04T00:31:26.473 に答える