1

私はこれを 1 時間実行しようとしています。さまざまな例を試しましたが、すべて同じように反応します。

$('body').append('<div id="allchecks">checkBoxes:<br />');
$('#allchecks').append('<input id="mcheck" type="checkbox"/>mainCheck<hr />');

for (var i = 0; i < 9; i++) {
    $('#allchecks').append('<input class="regCheck" type="checkbox" />regularCheck<br />');
}
$('#allchecks').append('</div>');

$('#mcheck').click(function () {
    if ($('#mcheck').is(':checked')) {
        $('.regCheck').attr('checked', 'checked');
    } else {
        $('.regCheck').removeAttr('checked');
    }
});

最初の 2 回の試行は機能しますが、2 回目の試行の後は何も機能しません。2回試行した後にソースを見ると、「 attr('checked', 'checked') 」が表示され、「 removeAttr('checked') 」も発生します。

しかし、視覚的ではありません。

誰かがなぜそれが起こっているのか説明できますか?

4

1 に答える 1

2

.prop()ブール値で使用する必要があります:

$('#mcheck').click(function () {
    if ($('#mcheck').is(':checked')) {
        $('.regCheck').prop('checked', true);
    } else {
        $('.regCheck').prop('checked', false);
    }
});

これは、同じもののはるかに短いバージョンです。

$('#mcheck').click(function () {
    $('.regCheck').prop('checked', this.checked);
});

PS常に DOM をトラバースするのではなく、要素をキャッシュする方法を学んでください。また、おそらくchangeではなく、イベントを使用する必要がありclickます。

于 2013-02-03T20:53:41.250 に答える