如何使用每个循环jquery禁用所有未选中的复选框

时间:2017-08-14 09:30:36

标签: jquery wordpress checkbox

我已尝试查看各种其他解决方案,但似乎没有一个适合我,所以我发布了这个。

我在Wordpress网站上有一个预订日历,允许用户在马场上选择1小时长的插槽,并且根据他们的角色(他们必须登录才能使用它),限制了小时数。例如,三小时,四小时或八小时。我要做的是计算动态检查的复选框的数量,然后,当它达到允许的限制时,它会禁用所有其他复选框,直到他们决定取消选中现有的复选框。

这是我的代码:

$('.booking_font_cuprum').click(function(){
    var checked = $("input:checked").length;
    if( checked >= <?php echo $allowed_hours ?>) {
        $("input").each( function() {
            if($(this).not(':checked')) {
                $(this).attr('disabled', 'disabled');
            }
        });
    } else {
        console.log("keep checking...");
    }
});
基于用户角色(并且它可以工作),PHP中已经规定了

$allowed_hours。基本上会发生的事情是每个复选框都被禁用,因此用户无法取消选中他们已经选择的内容。我认为使用:not选择器只会禁用未选中,但我可能会错误地执行此操作吗?一旦取消选中,我还需要重新启用所有其他复选框,以允许用户更改其选择。

2 个答案:

答案 0 :(得分:3)

您需要使用$(this).is(':checked')$(this).not(':checked')disabled是一个属性,因此您应该使用prop()代替attr()

if (!$(this).is(':checked')) {
  $(this).prop('disabled', true);
}

以下是小型工作演示:

&#13;
&#13;
$(document).ready(function() {
  $("input").each(function() {
    if (!$(this).is(':checked')) {
      $(this).prop('disabled', true);
    }
  });
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type='checkbox' checked />
<input type='checkbox' checked />
<input type='checkbox' />
<input type='checkbox' />
<input type='checkbox' checked />
<input type='checkbox' />
&#13;
&#13;
&#13;

答案 1 :(得分:0)

<迈克尔·爱默生,

根据您的编码标准,我已经提供了以下工作代码。

我已经尝试过以下代码并且工作正常。

$("input").each( function() {
   if(!$(this).is(':checked')) {
      $(this).attr('disabled', 'disabled');
   }
});

您必须记住的一件重要事情,请采用单一方法。即。通过设置&#39; attr&#39;或者&#39; prop&#39;。两者都可以正常工作。

但是如果您要将两种方法用于同一组控件以及各种方案,那么您可能会遇到设置启用/禁用值的冲突。