我已尝试查看各种其他解决方案,但似乎没有一个适合我,所以我发布了这个。
我在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
选择器只会禁用未选中,但我可能会错误地执行此操作吗?一旦取消选中,我还需要重新启用所有其他复选框,以允许用户更改其选择。
答案 0 :(得分:3)
您需要使用$(this).is(':checked')
和$(this).not(':checked')
。 disabled
是一个属性,因此您应该使用prop()
代替attr()
if (!$(this).is(':checked')) {
$(this).prop('disabled', true);
}
以下是小型工作演示:
$(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;
答案 1 :(得分:0)
根据您的编码标准,我已经提供了以下工作代码。
我已经尝试过以下代码并且工作正常。
$("input").each( function() {
if(!$(this).is(':checked')) {
$(this).attr('disabled', 'disabled');
}
});
您必须记住的一件重要事情,请采用单一方法。即。通过设置&#39; attr&#39;或者&#39; prop&#39;。两者都可以正常工作。
但是如果您要将两种方法用于同一组控件以及各种方案,那么您可能会遇到设置启用/禁用值的冲突。