以下のコードの驚くべき問題:
<head>
<script>
$(function() {
$('.select-all').click(function() {
var isChecked = $(this).is(':checked');
$(this).closest('section').find('input:checkbox').each(function() {
$(this).attr('checked', isChecked);
});
});
});
</script>
</head>
<body>
<section id="sect_1">
<input type="checkbox" id="cb_1_1">1.1
<input type="checkbox" id="cb_1_2">1.2
<input type="checkbox" id="cb_1_3">1.3
<input type="checkbox" class="select-all">All
</section>
<section id="sect_2">
<input type="checkbox" id="cb_2_1">2.1
<input type="checkbox" id="cb_2_2">2.2
<input type="checkbox" id="cb_2_3">2.3
<input type="checkbox" class="select-all">All"
</section>
</body>
- セクションの「すべて」の CB をクリックすると、このセクション内の他のすべての CB がチェックされます。予想通り
- セクションの「すべて」の CB をもう一度クリックすると、このセクション内の他のすべての CB のチェックが外されます。予想通り
- セクションの「すべて」の CB をもう一度クリックしても、このセクション内のすべての CB はチェックされません。
Chrome と Firefox で調べたところ、checked="checked"それぞれの内部で属性が表示されたり消えたりするのがわかりますが、<input type="checkbox" id="cb_x_x">表示される CB には影響しません。
何か案が?
編集
重要: 上記のコードは DOM を変更します。クリックした後、.select-allがチェック#cb_x_xされると、親セクション内のすべてのタグが更新され、DOM が検査されます<input type="checkbox" id="cb_x_x" checked="checked">。
もう一度クリックしてチェックを外す.select-allと、DOM も更新されます。すべて#cb_x_xの属性が失われますchecked。
継続して何度もクリックして再チェック/再チェック解除すると、親セクション内の.select-allすべての#cb_x_xタグは引き続き更新され、checked="checked"属性は親セクション内のすべてのタグで表示/非表示を続け#cb_x_xますが、表示は更新されません: すべての#cb_x_xCB が表示されchecked="checked"たままになりますDOMの検査時に属性が追加/削除されてもチェックされません。
ここで利用可能なライブコード: http://jsbin.com/orehor/3/