[英]Checking at least one checkbox within groups of checkboxes
我在标签中有一组复选框,像这样
<div class="constraints">
<label>
<label>
<input type="checkbox" ...>
</label>
.
.
.
<label>
<input type="checkbox" ...>
</label>
</label>
.
.
.
<label>
<label>
<input type="checkbox" ...>
</label>
.
.
.
<label>
<input type="checkbox" ...>
</label>
</label>
</div>
在每组标签( .constraints > label
)中,必须至少选中一个复选框。 为了确保这一点,我编写了此jQuery代码,如果所有这些复选框均未选中,则应在该组的第一个方框中打勾。
$('form .constraints input').on('change', function() {
var checks = $(this).closest('.constraints > label').find('input') ;
var atleastone = false ;
checks.each(function() {
if ($(this).is(':checked')) {
atleastone = true ;
}
}) ;
if (!atleastone) {
checks.first().attr('checked', true) ;
}
}) ;
哪个工作一次。 我第一次选中或取消选中任何框时,脚本都有效,但是随后的任何调用都不会产生任何结果。
怎么了?
您需要改变拥有的每个地方
.attr('checked')
.attr('checked', true)
至
.prop('checked')
.prop('checked', true)
要了解原因,可以检查.prop()和.attr()
您可以通过执行以下操作大大缩短代码
$('form .constraints input').on('change', function() {
var checks = $(this).closest('.constraints > label').find('input');
var checked = checks.filter(':checked').length == 0;
if (checked) checks.first().prop('checked', checked);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.