我有一个表格,每行都有一个复选框,下面有一个按钮.如果选中至少一个复选框,我想禁用该按钮.
<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,虽然它没有显示与本地相同的行为.
有没有人知道我如何能够完成它响应所有复选框并禁用按钮如果它们全部被禁用?
解决方法
试试这个:
var checkBoxes = $('tbody .myCheckBox'); checkBoxes.change(function () { $('#confirmButton').prop('disabled',checkBoxes.filter(':checked').length < 1); }); checkBoxes.change(); // or add disabled="true" in the HTML
解释,我改变了什么:
>缓存复选框元素列表/数组以使其更快一些:var checkBoxes = $(‘tbody .myCheckBox’);
>删除了if / else语句,并使用prop()在disable = true / false之间进行更改.
>使用filter()过滤缓存的变量/数组checkBoxes,这样它只会保留选中/选中的复选框.>在prop的第二个参数内添加了一个条件,当有多个复选复选框时,该条件将为true;如果不满足条件,则为false.