所以我们有一组复选框.可以 Select 的最大限制是3个,这是很棒的.这是为一个产品设计师,我正在工作,所以我可以为人们定制订单.我注意到,在测试时,当人们想要转到并单击另一个复选框时会感到沮丧,但由于这三个复选框已被选中,他们必须返回并取消选中一个复选框才能进行另一个 Select .这不是最大的交易,但我希望这种流动不会被打破.

下面是一些复选框和jQuery最大限制的快速示例.

$('input[type=checkbox]').change(function(e) {
  if ($('input[type=checkbox]:checked').length > 3) {
    $(this).prop('checked', false)
    alert("allowed only 3");
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div class="pricing-levels-3">
  <p><strong>(Select 3 Checkboxes)</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>

我是否需要创建一个记录每个选中复选框的数组,以便当我们超过最大值时,比方说超过3到第四个选项,它会取消选中数组底部的复选框,然后在加载下一个复选框之前将其卸载?

换句话说,我有点想让它像一个单选按钮一样工作,但具有复选框的优点,用户可以选中和取消选中多个选项,但如果他们遍历它,只需卸载他们之前的一个选项.

如有任何建议或例子,我们将不胜感激.我只能找到限制可以选中的复选框数量的示例.这个特别的案子什么都没有.

推荐答案

Let's play around some examples before deciding on the pros/cons and ultimately what's best for a specific use case, UI/UX.
Just, don't show alert popups and stuff: the alerts are the interaction-flow disrupting factor, not the checkboxes alone.

future 有三种不同的方法:

1.禁用复选框

最简单的,也许也是最好的.用户必须有意识和故意地取消选中以前的代码--而不是在用户背后自动执行我们的代码编程.disabled属性是众所周知的UI/UX可视状态. 想象一下,你点了额外的调味料(调味汁、香料等),你可以判断三种调味料的价格.如果通知明确规定,一个人最多可以订购三个额外的产品,从逻辑上讲,一个人将取消选中不太想要的产品(以便为更想要的产品让位).这样的用户界面行为可以很快被大多数用户接受.

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

$checkboxes.on("input", function() {
  const isMax = $checkboxes.filter(":checked").length === max;
  $checkboxes.not(":checked").prop("disabled", isMax);
});
<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>

优点:

  • 简单代码
  • 尊重用户的行为和 Select (没有魔力,程序取消勾选是在用户背后进行的,可能不会被注意到,考虑到可访问性)

缺点:

  • 一个都没有?要不就是不重要.如果你不这么认为,请在 comments 中纠正我).

2.取消选中上次选中的

另一种方法是记住last checkbox.当达到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>

优点:

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

缺点:

  • 不尊重用户 Select
  • 神奇的取消判断.可能不会被注意到,或者看起来像是某个UI错误
  • 用户可能需要认知地跟踪切换状态,并再次可视地查看所有 Select 状态
  • 不判断的逻辑可以很快学会,但对一些人来说可能看起来有点随机

3. Snake unchecking

菲罗-麦克斯.就像在蛇游戏中一样,当达到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错误
  • 复选框以编程方式取消选中/选中的逻辑并不是一目了然的
  • 一旦用户开始将手动取消选中与程序化取消选中相结合,复选框变为未选中的认知逻辑就会变得奇怪

Html相关问答推荐

当ul为Flex时,使ul元素在指定高度内可垂直滚动

为什么html复选框总是具有只读属性?

如何让一个动态列表以网格方式水平显示

如何正确使用counter()、counter—increment()和counter—reset()嵌套标题?

如何使用css实现悬停时的动画zoom ?

子元素以元素X开始和结束的元素的XPath?

如何在元素的三条边中间换行边框?

为什么在添加文本时网格区域会调整大小?

Div中的图像问题-(TailWind CSS中的网格)

CSS Grid:使网格行填充屏幕,将下一行推离屏幕

如何突破安莉得分

Style=背景图像URL引用变成&;Quot;

浏览器是否可以呈现存储在代码点0x09处的字形?

Web 组件 #shadow-root css 泄漏到文档

标题在实时网站上闪烁

理解图像与其内容框之间的关系

我真的需要一个容器来让行和列正常工作吗? ( bootstrap 程序 v5)

Angular:从服务器下载 HTML 并打印

将 HTML 元素粘贴到容器底部,而不剪裁其顶部

将背景图像裁剪成两半