复选框限制为 2 不起作用

Posted

技术标签:

【中文标题】复选框限制为 2 不起作用【英文标题】:checkbox limit to 2 is not working 【发布时间】:2018-02-15 16:57:51 【问题描述】:

我有一个简单的查询,它产生了一些问题。 单击任意两个复选框需要向下滑动一个 div。但是当我检查两个并尝试单击第三个时,它会显示 div 并禁用进一步单击。尝试过 .length >2,尝试过 .length ==2。没有得到正确的结果。 以下是我的代码

<input class="single-checkbox" type="checkbox" name="mixitt" value="1"> one <br>
<input class="single-checkbox" type="checkbox" name="mixitt" value="2"> two <br>
<input class="single-checkbox" type="checkbox" name="mixitt" value="3"> three <br>

我的脚本正在跟踪

$('.single-checkbox').on('change', function() 
    if($('.single-checkbox:checked').length == '2') 
        $('.mixflav').slideDown();
        $(this).prop('checked', false);         
     else 
        $('.mixflav').slideUp();
               
);

温馨提示

【问题讨论】:

这个 feddle 示例正在运行,它与 jsfiddle.net/devmount/n9g5hswo 相同 添加两个 if 条件来检查是否有两个输入被检查或超过两个被检查。 【参考方案1】:

您需要在此处进行两次检查,因为您希望 div 在恰好选中 2 个复选框时向下滑动。当尝试检查两个以上时,只需将该特定输入的 checked 属性设置为 false。

$('.single-checkbox').on('change', function() 
    if($('.single-checkbox:checked').length == 2) 
        $('.mixflav').slideDown();                
    else if($('.single-checkbox:checked').length > 2)
        $(this).prop('checked', false);    
    else 
        $('.mixflav').slideUp();
               
);
.mixflav 
  display:none;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input class="single-checkbox" type="checkbox" name="mixitt" value="1"> one <br>
<input class="single-checkbox" type="checkbox" name="mixitt" value="2"> two <br>
<input class="single-checkbox" type="checkbox" name="mixitt" value="3"> three <br>

<div class="mixflav">
test
</div>

【讨论】:

first if 会向下滑动,然后 if 会禁用进一步点击 else div 保持显示:none 它就像魅力一样...谢谢 Kiran,拯救了我的一天。 不客气,萨尔曼。很高兴我能帮助你。请不要忘记检查正确答案。祝你有美好的一天。【参考方案2】:

首先,length 不是字符串。使用数字比较。

if ($('.single-checkbox:checked').length === 2) 

接下来,您需要将=== 2&gt; 2 的条件分开。如果您在值为 2 时取消选中该框,则它变为 1

var checkedCount = $('.single-checkbox:checked').length;
if (checkedCount < 2) 
  $('.mixflav').slideUp();
 else if (checkedCount === 2) 
  $('.mixflav').slideDown();
 else 
  $(this).prop('checked', false);
   

【讨论】:

感谢 Sam R. 认为如果我使用 ===2 它不允许第二次检查启用。它立即停止检查功能【参考方案3】:

这很简单。在您将选中的项目设为 false 的地方,您将在此处滑动您的 div。 .length 已经返回了一个数字类型的对象。因此您可以使用&gt;&lt;== 检查它,其中=== 检查是否相等以及类型(数字或字符串文字)。

$('.single-checkbox').on('change', function() 
   if($('.single-checkbox:checked').length > 2) 
       this.checked = false;
       $('.mixflav1').slideDown();
   else if($('.single-checkbox:checked').length < 2)
       $('.mixflav1').slideUp();
   
);

$('.single-checkbox2').on('change', function() 
   if($('.single-checkbox2:checked').length > 1) 
       this.checked = false;
       $('.mixflav2').slideDown();
   else if($('.single-checkbox2:checked').length < 1)
       $('.mixflav2').slideUp();
   
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h1>First Selection (max 2)</h1>
<input class="single-checkbox"type="checkbox" name="test" value="1" />Item 1<br />
<input class="single-checkbox" type="checkbox" name="test" value="2" />Item 2<br />
<input class="single-checkbox" type="checkbox" name="test" value="3" />Item 3<br />
<input class="single-checkbox" type="checkbox" name="test" value="4" />Item 4<br />
<div class="mixflav1" style="display:none; ">
this is your desired div 1 
</div>
<hr />
<h1>Second Selection (max 1)</h1>
<input class="single-checkbox2" type="checkbox" name="test" value="1" />Item 1<br />
<input class="single-checkbox2" type="checkbox" name="test" value="2" />Item 2<br />
<input class="single-checkbox2" type="checkbox" name="test" value="3" />Item 3<br />


<div class="mixflav2" style="display:none">
this is your desired div 2 
</div>

【讨论】:

以上是关于复选框限制为 2 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

复选框的jQuery验证消息不起作用

复选框选择的限制

限制查找结果的数量,头部不起作用[重复]

使用服务器端数据源时,标题复选框选择不起作用

复选框计算不起作用

淘汰赛导致 JQuery 选择出现问题?验证不起作用