使用jQuery禁用/启用按钮

时间:2015-12-04 13:58:09

标签: javascript jquery html button checkbox

如果未选中button,我想停用checkbox。应至少检查一个checkbox以启用该按钮。

我的HTML:

<table border="1">
    <tr>
        <th></th>
        <th>Name</th>
    </tr>
    @foreach($clients as $client)
    <tr>
        <td><input type="checkbox" name="status[]" value="$client['id']" class="checkbox"></td>
        <td>{{ $client['name'] }}</td>
    </tr>
    @endforeach    
</table>

<button type="button" id="off" class="btn btn-default" data-toggle="modal" data-target="#offer" disabled>Choose New Offer</button>

我尝试了这个jQuery代码:

<script>
    $(function() {
        $('.checkbox').click(function() {
            if ($(this).is(':checked')) {
                $('#off').removeAttr('disabled');
            } else {
                $('#off').attr('disabled', 'disabled');
            }
        });
    });
</script>

默认情况下,该按钮为disabled。选中一个复选框后,如果未选中,则会再次禁用该复选框。但问题是,当我选中多个复选框并取消选中一个复选框时,它会再次禁用,但仍会检查许多复选框。

2 个答案:

答案 0 :(得分:4)

不检查是否选中了单击的复选框,而应检查是否选中了任何复选框。您可以通过选中$('.checkbox:checked')的所有选中复选框,然后检查返回的jQuery对象的长度来执行此操作。

$(function() {
    $('.checkbox').click(function() {
        if ($('.checkbox:checked').length > 0) {
            $('#off').removeAttr('disabled');
        } else {
            $('#off').attr('disabled', 'disabled');
        }
    });
});

JSFiddle

答案 1 :(得分:4)

您需要查看是否检查了任何复选框,以便对禁用状态做出决定。

您还应该使用prop而不是attr来确保跨浏览器兼容性。

$(function () {
  $('.checkbox').click(function () {
    $('#off').prop('disabled', !$('.checkbox:checked').length);
  });
});

JSFiddle: http://jsfiddle.net/TrueBlueAussie/L72Lv6h1/

prop的{​​{1}}可以使用布尔标记值,因此不需要disabled