启用/禁用按钮基于多个已选中复选框的计数,所有复选框都具有不同的ID

时间:2012-03-15 09:36:04

标签: javascript jquery asp.net gridview

我在这样的表格中有一个复选框列表以及一个按钮: -

<table id="mytable">
<tr><th>checked</th><th>id</th><th>text</th></tr>
<tr><td><input id="cb1" type="checkbox" name="checker1"/></td><td>123</td><td>abc</td></tr>
<tr><td><input id="cb2" type="checkbox" name="checker2"/></td><td>456</td><td>def</td></tr>
<tr><td><input id="cb3" type="checkbox" name="checker3"/></td><td>789</td><td>ghi</td></tr>
<tr><td><input id="cb4" type="checkbox" name="checker4"/></td><td>454</td><td>ghi</td></tr>
<tr><td><input id="cb5" type="checkbox" name="checker5"/></td><td>565</td><td>ghi</td></tr>
</table>

<input type="button" name="myjqbutton" value="My Jquery Button" id="jqb" disabled="true"/>

我想要做的是,只有在选中了一个或多个复选框时才启用该按钮。

最初的想法是我需要计算表格中选中的复选框数量,我可以使用.each将它们计算到变量中。

var mytable= document.getElementById('mytable');
$('input:checkbox:checked', mytable).each(function() {
// whatever here
});

但是,每个复选框都需要更改事件来检查计数并启用或禁用该按钮,具体取决于计数&gt; 0或不。

或者是否有更简单的方法来实现我正在寻找的功能。

5 个答案:

答案 0 :(得分:5)

你可以做到

$('#mytable input:checkbox').change(function(){
  $("#jqb").prop("disabled", $('#mytable input:checkbox:checked').length ===0);
}); 

答案 1 :(得分:0)

它可以做你想要的:

$('#mytable input[type=checkbox]').click(function(){
if($('#mytable input[type=checkbox]:selected').size()) > 0) $("#jqb").attr('disabled', 'disabled');
else $('.someElement').removeAttr('disabled');

答案 2 :(得分:0)

if ($('#mytable :checkbox:checked').length) {
    $('#jqb').prop('disabled', false); // Assumes disabled by default
}

答案 3 :(得分:0)

试试这个;

 $("#jqb").prop("disabled", $("#mytable input:checkbox:checked']").length === 0);

答案 4 :(得分:0)

change事件是必须的,但是jQuery提供了复杂的选择器来减少计算已检查事件的工作:

$(':checkbox').change(function(e) {
    // for a performance considerationg, to reduce selector lookup, 
    // once a checkbox is checked itself, there must be one or more checkbox checked
    // then the selector finds checked checkbox whose id attribute starts with "cb"
    if (this.checked || $(':checkbox[id^="cb"]:checked).length >= 1) {
        // do stuff
    }
});