我有一个包含多个复选框组的 jQuery 脚本。如果选择了“父”,它还应该选择所有“子”框,如果未选择任何“子”框,则“父”也应该被取消选择,并且只选中选中的“子”框。
这是一个 jsFiddle:http: //jsfiddle.net/9NmE7/
问题是,使用 jQuery 1.4.2 这曾经很好用,但自从升级到 1.10.2 后它仍然可以工作,但只有一次。这意味着,如果您单击“父 1”,它就会起作用。然后你取消选择'Parent 1',它也可以工作,但是如果你点击'Parent 1'再次选择它,它就不再工作了。
这里有什么问题?
以防万一,这里是 HTML:
<form>
<fieldset>
<input type="checkbox" class="parentCheckBox" /> Parent 1<br />
<input type="checkbox" class="childCheckBox" /> Child 1-1<br />
<input type="checkbox" class="childCheckBox" /> Child 1-2<br />
<input type="checkbox" class="childCheckBox" /> Child 1-3<br />
<input type="checkbox" class="childCheckBox" /> Child 1-4<br />
<input type="checkbox" class="childCheckBox" /> Child 1-5<br />
</fieldset>
<fieldset>
<input type="checkbox" class="parentCheckBox" /> Parent 2<br />
<input type="checkbox" class="childCheckBox" /> Child 2-1<br />
<input type="checkbox" class="childCheckBox" /> Child 2-2<br />
<input type="checkbox" class="childCheckBox" /> Child 2-3<br />
<input type="checkbox" class="childCheckBox" /> Child 2-4<br />
<input type="checkbox" class="childCheckBox" /> Child 2-5<br />
</fieldset>
<fieldset>
<input type="checkbox" class="parentCheckBox" /> Parent 3<br />
<input type="checkbox" class="childCheckBox" /> Child 3-1<br />
<input type="checkbox" class="childCheckBox" /> Child 3-2<br />
<input type="checkbox" class="childCheckBox" /> Child 3-3<br />
<input type="checkbox" class="childCheckBox" /> Child 3-4<br />
<input type="checkbox" class="childCheckBox" /> Child 3-5<br />
</fieldset>
</form>
和 jQuery:
$(document).ready(
function() {
//clicking the parent checkbox should check or uncheck all child checkboxes
$(".parentCheckBox").click(
function() {
$(this).parents('fieldset:eq(0)').find('.childCheckBox').attr('checked', this.checked);
}
);
//clicking the last unchecked or checked checkbox should check or uncheck the parent checkbox
$('.childCheckBox').click(
function() {
if ($(this).parents('fieldset:eq(0)').find('.parentCheckBox').attr('checked') == true && this.checked == false)
$(this).parents('fieldset:eq(0)').find('.parentCheckBox').attr('checked', false);
if (this.checked == true) {
var flag = true;
$(this).parents('fieldset:eq(0)').find('.childCheckBox').each(
function() {
if (this.checked == false)
flag = false;
}
);
$(this).parents('fieldset:eq(0)').find('.parentCheckBox').attr('checked', flag);
}
}
);
}
);