Javascript 如果在ajax响应中未选中复选框(跨组),则禁用按钮

Javascript 如果在ajax响应中未选中复选框(跨组),则禁用按钮,javascript,jquery,html,ajax,checkbox,Javascript,Jquery,Html,Ajax,Checkbox,这是对 在上面的帖子中,除非选中至少一个复选框,否则他们将禁用一个按钮 在我的情况下,我有两组复选框: <div class="clone-ctp__filters"> <input type="checkbox"> <label>Foo 1</label> <input type="checkbox"> <label>Bar 2</label> <input type="check

这是对

在上面的帖子中,除非选中至少一个复选框,否则他们将禁用一个按钮

在我的情况下,我有两组复选框:

<div class="clone-ctp__filters">
    <input type="checkbox"> <label>Foo 1</label>
    <input type="checkbox"> <label>Bar 2</label>
    <input type="checkbox"> <label>Baz 3</label>
</div>

<div class="clone-ctp__users">
    <input type="checkbox"> <label>Foo 5</label>
    <input type="checkbox"> <label>Bar 6</label>
    <input type="checkbox"> <label>Baz 7</label>
</div>
这与链接的帖子具有相同的效果。除非选中至少一个复选框,否则它将禁用该按钮。但它与来自哪一组复选框无关

我的解决办法是复制代码,例如

var checkBoxes = $('.clone-ctp__filters input[type="checkbox"]');
然后,完成后,用

var checkBoxes = $('.clone-ctp__users input[type="checkbox"]');
这违背了干燥的原则。有没有更优雅的方式来写这个

jquery 3.2.1

for循环(或forEach)是合适的

另外,如果未选中任何一个组,请确保禁用“提交”(我使用下面的一些组)。如果未选择上次组,则当前代码将禁用它

var checkboxGroups = ['clone-ctp__filters', 'clone-ctp__users'].map(containerClass => $(`.${containerClass} input[type="checkbox"]`));
checkboxGroups.flat().forEach(checkbox =>
    checkbox.change(() =>
        $('button').prop('disabled', checkboxGroups.some(checkboxes => checkboxes.filter(':checked').length < 1))));
$('input[type="checkbox"]').change();

富1
酒吧2
巴兹3
富5
酒吧6
巴兹7

继续
什么是
容器类
?它在第1行定义为
['clone-ctp_uufilters','clone-ctp_uusers']
的每个元素。当我复制/粘贴了您在上面发布的确切js时,它会出现控制台错误
未捕获引用错误:复选框未定义
,并且不象在Fiddle中一样工作。修复了大小写错误(我没有jquery,所以我只测试了普通版本)。尽管你应该学会调试简单的控制台错误,否则作为一名开发人员,你不会有多大进步。
var checkBoxes = $('.clone-ctp__users input[type="checkbox"]');
var checkboxGroups = ['clone-ctp__filters', 'clone-ctp__users'].map(containerClass => $(`.${containerClass} input[type="checkbox"]`));
checkboxGroups.flat().forEach(checkbox =>
    checkbox.change(() =>
        $('button').prop('disabled', checkboxGroups.some(checkboxes => checkboxes.filter(':checked').length < 1))));
$('input[type="checkbox"]').change();