如果所有复选框都未选中,则禁用按钮,如果至少选中一个,则启用它

Posted

技术标签:

【中文标题】如果所有复选框都未选中,则禁用按钮,如果至少选中一个,则启用它【英文标题】:Disable button if all checkboxes are unchecked and enable it if at least one is checked 【发布时间】:2014-01-08 09:16:56 【问题描述】:

我有一个表格,每行都有一个复选框,下面有一个按钮。如果至少选中一个复选框,我想禁用该按钮。

<tbody>
    <tr>
        <td>
            <input class="myCheckBox" type="checkbox"></input>
        </td>
    </tr>
</tbody>
<button type=submit id="confirmButton"> BUTTON </button>

我想出的 jQuery 如下:

$('tbody').click(function () 
    $('tbody tr').each(function () 
        if ($(this).find('.myCheckBox').prop('checked')) 
            doEnableButton = true;
        
        if (!doEnableButton) 
            $('#confirmButton').prop('disabled', 'disabled')
        
        else 
            $('#confirmButton').removeAttr("disabled");
        
    );
);

当然,这是行不通的。否则我不会在这里。它所做的只是响应最低的复选框(例如,当最低的按钮被选中/取消选中时,按钮被启用/禁用)。

我创建了一个 JSFIddle here,尽管它没有显示与本地相同的行为。

有谁知道我如何实现它响应所有复选框并禁用按钮(如果它们都被禁用)?

【问题讨论】:

你不应该像这样混合.prop.attr。只需使用$('#confirmButton').prop('disabled', !doEnableButton) 你没有在你的小提琴中添加jQuery作为框架,这就是为什么它与本地不一样。 @DanielLisik 啊哈! :-) @FelixKling prop 中的第二个参数是什么(在您的情况下为 !doEnableButton 要分配给属性的值。 .disabled 属性可以具有 truefalse 值。 api.jquery.com/prop 【参考方案1】:

试试这个:

var checkBoxes = $('tbody .myCheckBox');
checkBoxes.change(function () 
    $('#confirmButton').prop('disabled', checkBoxes.filter(':checked').length < 1);
);
checkBoxes.change(); // or add disabled="true" in the html

Demo

解释,我改变了什么:

缓存了复选框元素列表/数组以使其更快:var checkBoxes = $('tbody .myCheckBox'); 删除了if/else 语句并使用prop() 在disable=true/false 之间切换。 使用filter() 过滤缓存的变量/数组checkBoxes,因此它只会保留选中/选中的复选框。 在Prop的第二个参数内添加了一个条件,它将在true当存在多个选中的复选框时,或者如果不满足条件,则为false。

【讨论】:

@FelixKling,非常真实!刚刚添加了。 @user2609980,很高兴我能提供帮助。还添加了一些解释。【参考方案2】:

添加一个在复选框被更改时触发的事件处理程序,并查看是否有任何复选框,并适当地设置 disabled 属性:

var boxes = $('.myCheckBox');

boxes.on('change', function() 
    $('#confirmButton').prop('disabled', !boxes.filter(':checked').length);
).trigger('change');

FIDDLE

【讨论】:

但是在最后一个问题中,他将其表述为 "...如果按钮全部禁用,则禁用按钮"。如果是这样,那么我的fiddle 可能会有所帮助,因为我正是通过这种方式理解了这项任务。 这就像一个魅力,只是它是错误的方式,正如@VisioN 所说;-)。 @user2609980 - 哦,好吧,我误解了“如果至少选中一个框,则禁用按钮”的意思?修好了。【参考方案3】:

试试这个:

$('tbody').click(function () 

   if ($('.myCheckBox:checked').length >= 1)  
           $('#confirmButton').prop("disabled", true);
       
   else 
            $('#confirmButton').prop("disabled", false);
    

 );

DEMO

【讨论】:

【参考方案4】:

试试这个:

let $cbs = $(".myCheckBox").change(function() 
    if ($cbs.is(":checked"))
        // disable #confirmButton if at least one checkboxes were checked
        $("#confirmButton").prop("disabled", false);
     else 
        // disable #confirmButton if all checkboxes were unchecked
        $("#confirmButton").prop("disabled", true);
    
);

【讨论】:

这不是正确的答案。回答时请仔细阅读问题!

以上是关于如果所有复选框都未选中,则禁用按钮,如果至少选中一个,则启用它的主要内容,如果未能解决你的问题,请参考以下文章

如果在 Jquery 加载页面时在网格中禁用了所有复选框,则如果没有选中复选框并禁用按钮,则发出警报

如果选中/取消选中复选框,则启用/禁用提交按钮?

html 如果未选中复选框,则禁用按钮

如果选中第一个复选框,则根据条件禁用其他复选框

如果复选框选中禁用其他,如果未选中启用所有 JavaScript?

如果选中任一复选框,则启用和禁用文本字段