javascript - 复选框选择

标签 javascript jquery html

将复选框限制为一定数量的示例是 here .

var limit = 3;
$('input.single-checkbox').on('change', function(evt) {
  if ($(this).siblings(':checked').length >= limit) {
    this.checked = false;
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="pricing-levels-3">
  <p><strong>Which level would you like? (Select 3 Levels)</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>

但它允许用户从所有复选框中选择任意三个。如何限制用户选择连续三个而不是随机三个复选框?例如,如果用户选择的第一个复选框为级别 4,则用户只能选择接下来的两个 (5,6) 或前两个 (3,2) 复选框,或者前一个 (3) 和下一个 (5)复选框。

谢谢。

最佳答案

您必须扩展您的 change 事件监听器回调,以检查(当检查其他项时)这些检查项之一是否是当前更改项的上一个或下一个同级项。如果是这样,那就没问题了。

此外,取消选中时,如果是中间的,则不应该这样做。 (否则这会产生间隙。)

是时候看一些工作示例了!

var limit = 3;
$('input.single-checkbox').on('change', function(evt) {
  let $this = $(this);
  
  if (
    !$this.prop('checked') &&
    $this.prevAll('input').first().prop('checked') &&
    $this.nextAll('input').first().prop('checked')
  ) {
    // Don't uncheck if both neighbours are checked (would create a gap)
    $this.prop('checked', true);
  } else if (
    $this.siblings(':checked').length >= limit ||
    (
      $this.siblings(':checked').length > 0 &&
      !$this.prevAll('input').first().prop('checked') &&
      !$this.nextAll('input').first().prop('checked')
    )
  ) {
    // Don't check if limit is reached
    // or
    // none of the neighbours are checked but others are
    $this.prop('checked', false);
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="pricing-levels-3">
  <p><strong>Which level would you like? (Select 3 Levels)</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>

关于javascript - 复选框选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53037557/

相关文章:

javascript - JQuery .select() 意外调用方法或属性错误

Javascript 在同一窗口中使用关闭按钮打开新选项卡

javascript - "live-editing"多用户平台列表(用于网站项目)

javascript - 禁用 html 中日历 View 的输入类

javascript - else if 语句在变量分配中的效率

javascript - jQuery 在第二次单击时执行不同的操作?

jquery - Magento Jquery UI 日期选择器

jquery - 当 TBody tr 为空时移除 TFoot

javascript - 使用关闭按钮取消选中复选框

javascript - session 存储可以安全吗?