1

昨日、私はstackoverflowの質問の1つに答えていHow to check/uncheck all checkboxes based on the selection of one checkboxましたが、この解決策を思いつきました。しかし、問題は 1 回しか機能せず、2 回クリックすると機能しないことです。フィドル

$('#allcb').click(function(){
    if ($('#allcb').is(':checked'))
    {
      $('.chk').each(function(){
        $(this).attr('checked', true);
      });
    }
    else
    {
        $('.chk').each(function(){
           $(this).attr('checked', false);
        });
    }
});

要件に従って正常に動作するこのコードを見つけました FIDDLE

では、私のアプローチの何が問題なのですか?または、まったく機能しないはずです。一度機能する場合、なぜ二度機能しないのですか?

4

1 に答える 1

6

一度しか機能しない理由はprop()、 ではなくを使用する必要があるためですattr()

prop()のようにプロパティを変更しますが、のように属性element.checkedを変更しますが、属性を変更してもプロパティは変更されません。属性の変更は、次にプロパティがチェックされたときに一度だけ機能するため、本質的に必要なものです。属性の反対を戻します。attr()<input type="radio" checked="checked" />

prop と attr の違いの概要については、このSO の質問を参照してください。

$('#allcb').click(function(){
    if ($('#allcb').is(':checked'))
    {
      $('.chk').each(function(){
        $(this).prop('checked', true);
      });
    }
    else
    {
        $('.chk').each(function(){
           $(this).prop('checked', false);
        });
    }
});

フィドル

補足として、そのコードは次のように要約できます。

$('#allcb').on('click', function(){
    $('.chk').prop('checked', this.checked);
});

フィドル

于 2013-07-24T13:20:06.240 に答える