JQuery取消选择复选框一次大于最大限制

w3nuxt5m  于 2023-08-04  发布在  jQuery
关注(0)|答案(2)|浏览(109)

所以我们有一组复选框。有一个最大限制3,可以选择这是伟大的。这是为一个产品设计师,我正在工作,所以我可以使自定义订单的人。我注意到,当人们想去点击另一个复选框时,他们会感到沮丧,但由于这三个复选框已经被选中,他们必须在做出另一个选择之前返回并取消选中复选框。这不是最大的交易,但我希望这种流动不会被打破。
下面是一些复选框和jquery最大限制的快速示例。

$('input[type=checkbox]').change(function(e) {
  if ($('input[type=checkbox]:checked').length > 3) {
    $(this).prop('checked', false)
    alert("allowed only 3");
  }
});

个字符
我是否需要制作一个数组来记录每个选中的复选框,这样当我们超过最大值时,比如说超过三个复选框进入第四个选项时,它会取消选中数组底部的复选框,然后在加载下一个复选框之前卸载它?
换句话说,我希望它像单选按钮一样工作,但具有复选框的优点,用户可以选中和取消选中多个选项,但如果他们浏览它,只需卸载他们之前的选择之一。
任何建议或例子将不胜感激。我只能找到限制可以选择的复选框数量的例子。对这个特殊的案子没什么。

k3fezbri

k3fezbri1#

让我们在决定优点/缺点以及最终什么对特定用例UI/UX最好之前先玩一些例子。
只是,不要显示警报弹出窗口和东西:警报是干扰交互流的因素,而不仅仅是复选框。
三种不同的方法:

1.关闭复选框

最简单的,也许是最好的。用户必须有意识地和故意地取消选中前一个-而不是我们的代码自动地在用户背后做编程性的事情。disabled属性是一个众所周知的UI/UX视觉状态。想象一下,你正在订购额外的东西(酱汁,香料等),你可以检查三个价格。如果通知明确指出,一个人可以订购多达三个额外的,从逻辑上讲,一个人将取消选中一个不太想要的产品(使地方),以更想要的一个。这样的UI行为可以很快被大多数用户所接受。

const $checkboxes = $(".single-checkbox");
const max = 3;

$checkboxes.on("input", function() {
  const isMax = $checkboxes.filter(":checked").length === max;
  $checkboxes.not(":checked").prop("disabled", isMax);
});

个字符
优点:

  • 简单代码
  • 尊重用户的操作和选择(没有魔法,编程取消检查是在用户背后进行的,可能会被忽视,记住可访问性)

缺点:

  • 一个都没有?或者说没有什么重要的。在评论中纠正我,如果你不这样认为)。

2.取消上次勾选

另一种方法是记住最后一个复选框。当达到max时-取消选中最后一个元素。在这种情况下,前两个在该过程中保持不变

const $checkboxes = $(".single-checkbox");
const max = 3;
let $last;

$checkboxes.on("input", function() {
  const isMax = $checkboxes.filter(":checked").length - 1 === max;
  if (isMax) $last.prop("checked", false);
  $last = $(this);
});
<div class="pricing-levels-3">
  <p><strong>(Select up to 3 products)</strong></p>
  <input class="single-checkbox" type="checkbox">1<br>
  <input class="single-checkbox" type="checkbox">2<br>
  <input class="single-checkbox" type="checkbox">3<br>
  <input class="single-checkbox" type="checkbox">4<br>
  <input class="single-checkbox" type="checkbox">5<br>
</div>

<script src="https://code.jquery.com/jquery-3.1.0.js"></script>

的字符串
优点:

  • 简单代码
  • 更容易理解只有最后一个复选框在切换(只有在用户可以一次看到所有复选框的情况下-这在可滚动应用程序中从未保证)

缺点:

  • 不尊重用户选择
  • 魔法解除可能会被忽略或看起来像一些UI错误
  • 用户可能需要认知地跟踪切换状态并再次视觉地回顾所有选择状态
  • 不检查的逻辑可以很快地掌握,但对某些人来说似乎有点随机

3. Snake 取消勾选

FILO-Max。就像在贪吃蛇游戏中一样,当max到达时,最旧的一个被删除,新的一个被附加到数组中。

const $checkboxes = $(".single-checkbox");
const max = 3;
const checked = [];

$checkboxes.on("input", function() {
  const isMax = $checkboxes.filter(":checked").length - 1 === max;

  if (this.checked) {
    // Add to Array head on checked
    checked.push(this);
  } else {
    // Remove from array index on unchecked
    checked.splice(checked.indexOf(this), 1);
  }

  // Remove tail on maxxed
  if (isMax) {
    const $tail = $(checked.shift());
    $tail.prop("checked", false);
  }
});
<div class="pricing-levels-3">
  <p><strong>(Select up to 3 products)</strong></p>
  <input class="single-checkbox" type="checkbox">1<br>
  <input class="single-checkbox" type="checkbox">2<br>
  <input class="single-checkbox" type="checkbox">3<br>
  <input class="single-checkbox" type="checkbox">4<br>
  <input class="single-checkbox" type="checkbox">5<br>
</div>

<script src="https://code.jquery.com/jquery-3.1.0.js"></script>

的字符串
优点:

  • 不确定...

缺点:

  • 更多代码
  • 魔法解除可能会被忽略或看起来像一些UI错误
  • 复选框以编程方式变为未选中/选中的逻辑并不明显
  • 一旦用户开始将手动取消选中与编程取消选中相结合,复选框变为未选中的认知逻辑就变得奇怪了
uqxowvwt

uqxowvwt2#

你听过托马斯·莫里斯的《乌托邦》吗?
嗯,灰色是“反乌托邦”。☺️
控制论出现了。
让克劳德·香农的熵降下来。
将选项分组3次,并使用3个单选按钮️。

相关问题