繁体   English   中英

选中复选框组中的至少一个复选框

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM