javascript - 无法限制选中复选框的数量

标签 javascript html

不确定为什么脚本不起作用。当您尝试选择两个以上时,希望它取消选中一个框。例如,如果您选择“CHEAP”和“FAST”,然后尝试选择“GOOD”,则“FAST”将被取消选中。

        document.querySelector('body').className = 'has-js';
        var checked = [];
            [].forEach.call(document.querySelectorAll('input[type="checkbox"]'), function (checkbox) {
          checkbox.addEventListener('change', function (e) {
            ga('send', 'event', 'checkbox', 'trigger');
        if (checkbox.checked && checked.length === 2) {
              var uncheckTarget = checked[Math.floor(Math.random() * checked.length)];
          uncheckTarget.checked = false;
        }
            checked = document.querySelectorAll('input[type="checkbox"]:checked');
          });
        });
      <div class="container">
            <input type="checkbox" id="fast">
            <label class="red" for="fast">FAST</label>

            <input type="checkbox" id="good">
            <label class="green" for="good">GOOD</label>

        <input type="checkbox" id="cheap">
        <label class="blue" for="cheap">CHEAP</label>
          </div>

最佳答案

您的解决方案似乎过于复杂。此外,您应该使用 click 事件而不是 change 事件进行回调,因为当 change 发生时,复选标记已存在于复选框,所以现在您必须将其删除。通过单击,您可以取消该事件,该事件发生在复选标记进入复选框之前。

var boxes = Array.prototype.slice.call(document.querySelectorAll('input[type="checkbox"]'));

boxes.forEach(function(chk) {
  chk.addEventListener('click', function (e) {
    if (document.querySelectorAll("input[type=checkbox]:checked").length > 2) {
      e.preventDefault();
      alert("You already have 2 checkboxes checked. Uncheck one and try again!");
    }  
  });
});
<div class="container">
  <input type="checkbox" id="fast"><label class="red" for="fast">FAST</label>
  <input type="checkbox" id="good"><label class="green" for="good">GOOD</label>
  <input type="checkbox" id="cheap"><label class="blue" for="cheap">CHEAP</label>
</div>

关于javascript - 无法限制选中复选框的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48229816/

相关文章:

javascript - setTimeout(..0) 排序

html - 覆盖 “a” 标签应用的 CSS

javascript - SVG:当 y 属性为 200 时,为什么 getBoundingClientRect 返回 190?

javascript - 为什么当我反转顺序时 jQuery fadeIn 效果不起作用?

javascript - 向图像 slider 添加淡入淡出效果

javascript - 获取数组元素中的位置

javascript - 使用 Ajax 在 JSON 文件中修改和保存数据

css - 附加脚本不起作用

html - 使用 Redux Form 处理数字输入会做一些奇怪的事情

html - 我的网站菜单在 IE 上无法正确显示