以下のコードの驚くべき問題:
<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_x
CB が表示されchecked="checked"
たままになりますDOMの検査時に属性が追加/削除されてもチェックされません。
ここで利用可能なライブコード: http://jsbin.com/orehor/3/