【问题标题】:Limit checkbox to 2, but moving the select instead of blocking it将复选框限制为 2,但移动选择而不是阻止它
【发布时间】:2018-04-01 10:49:43
【问题描述】:

我希望允许客户从一组 4 个复选框中仅选择 2 个复选框,但如果他们选择第三个,则从已选择的 2 个中的一个中选择将移至第三个。

这个网站上有一个例子(大部分是手机屏幕尺寸) https://www.office-coffee.co.uk/coffee-machines-for-business/comparison/

到目前为止我有这个代码:

$(document).ready(function() {
  var theCheckboxes = $(".pricing-levels-2 input[type='checkbox']");
  theCheckboxes.click(function() {
    if (theCheckboxes.filter(":checked").length > 2)
      $(this).removeAttr("checked");
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="pricing-levels-2">
  <p><strong>Which level would you like?</strong></p>
  <input class="single-checkbox" type="checkbox" name="vehicle" value="Bike">Level 1<br>
  <input class="single-checkbox" type="checkbox" name="vehicle" value="Bike">Level 2<br>
  <input class="single-checkbox" type="checkbox" name="vehicle" value="Bike">Level 3<br>
  <input class="single-checkbox" type="checkbox" name="vehicle" value="Bike">Level 4<br>
  <input class="single-checkbox" type="checkbox" name="vehicle" value="Bike">Level 5<br>
  <input class="single-checkbox" type="checkbox" name="vehicle" value="Bike">Level 6<br>
  <input class="single-checkbox" type="checkbox" name="vehicle" value="Bike">Level 7<br>
</div>

【问题讨论】:

  • 在提到的网站上找不到复选框..
  • 哪一个应该移到下一个?第一个还是第二个?
  • 您必须缩小屏幕直到进入移动模式,然后点击比较“COMPARE OTHERS”...对不起,我忘了提及。
  • 在下面查看我的答案..
  • 第一个被选中的移动到第三个并继续。

标签: javascript jquery select checkbox


【解决方案1】:

您可以使用 DOM 遍历方法来定位复选框以使用 .prop(propertyName, value) 设置其 checked 属性。在示例中,我操作了第一个复选框属性

$(document).ready(function() {
  var theCheckboxes = $(".pricing-levels-2 input[type='checkbox']");
  theCheckboxes.change(function() {
    if (theCheckboxes.filter(":checked").length > 2) {
      theCheckboxes.filter(":checked").not(this).eq(0).prop('checked', false);
    }
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="pricing-levels-2">
  <p><strong>Which level would you like?</strong></p>
  <input class="single-checkbox" type="checkbox" name="vehicle" value="Bike">Level 1<br>
  <input class="single-checkbox" type="checkbox" name="vehicle" value="Bike">Level 2<br>
  <input class="single-checkbox" type="checkbox" name="vehicle" value="Bike">Level 3<br>
  <input class="single-checkbox" type="checkbox" name="vehicle" value="Bike">Level 4<br>
  <input class="single-checkbox" type="checkbox" name="vehicle" value="Bike">Level 5<br>
  <input class="single-checkbox" type="checkbox" name="vehicle" value="Bike">Level 6<br>
  <input class="single-checkbox" type="checkbox" name="vehicle" value="Bike">Level 7<br>
</div>

【讨论】:

  • 非常接近,但再次抱歉,我想我不是很清楚。当点击第三个时,第一个移动到第三个,然后第二个“成为”第一个,所以当客户端点击第四个时,第二个将移动到第四个。基本上和这个咖啡网站一样。
【解决方案2】:

要删除第一个,您可以使用theCheckboxes.filter(":checked:first").removeAttr("checked");

例如:

$(document).ready(function() {
  var theCheckboxes = $(".pricing-levels-2 input[type='checkbox']");
  theCheckboxes.click(function() {
    if (theCheckboxes.filter(":checked").length > 2)
      theCheckboxes.filter(":checked:first").removeAttr("checked");
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="pricing-levels-2">
  <p><strong>Which level would you like?</strong></p>
  <input class="single-checkbox" type="checkbox" name="vehicle" value="Bike">Level 1<br>
  <input class="single-checkbox" type="checkbox" name="vehicle" value="Bike">Level 2<br>
  <input class="single-checkbox" type="checkbox" name="vehicle" value="Bike">Level 3<br>
  <input class="single-checkbox" type="checkbox" name="vehicle" value="Bike">Level 4<br>
  <input class="single-checkbox" type="checkbox" name="vehicle" value="Bike">Level 5<br>
  <input class="single-checkbox" type="checkbox" name="vehicle" value="Bike">Level 6<br>
  <input class="single-checkbox" type="checkbox" name="vehicle" value="Bike">Level 7<br>
</div>

【讨论】:

  • 非常接近,但再次抱歉,我想我不是很清楚。当点击第三个时,第一个移动到第三个,然后第二个“变成”第一个,所以当客户端点击第四个时,第二个会移动到第四个。基本上和这个咖啡网站一样
猜你喜欢
  • 2013-08-25
  • 2015-05-09
  • 1970-01-01
  • 2019-04-26
  • 2023-03-18
  • 2017-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多