javascript - 涉及数组时限制选中的框数量

标签 javascript php arrays

我对 JavaScript 的东西相当业余,所以如果这个问题听起来有点愚蠢,我深表歉意。

我目前正在尝试编写一些涉及表单的代码,其中可以选择的复选框数量受到限制。到目前为止,我遇到的最适合我的目的的方法是此处详细介绍的方法:

http://www.javascriptkit.com/script/script2/checkboxlimit.shtml

它在大多数情况下都有效,但当复选框需要输出数组时我遇到了问题。例如,如果我将输入行写为:

<input type="checkbox" name="choice[]" value="One" /> One<br />
<input type="checkbox" name="choice[]" value="Two" /> Two<br />
<input type="checkbox" name="choice[]" value="Three" /> Three<br />

我已经尝试了很多方法,但我不知道如何更改代码,以便它与输入名称字段中的括号一起使用。

最佳答案

这里有几件事:

  1. 本教程引用了 checkboxlimit(document.forms.world.countries, 2)。这不适用于 []。您可以使用getElementsByClassName
  2. 如果您取消选中某个复选框,这似乎不会按预期工作,因为它适用于“onclick”,并且永远不会增加选中复选框的数量。

我已经调整了这个 fiddle 中的代码:https://jsfiddle.net/ad8t5sju/

我改变了什么:

  var elems = form.getElementsByClassName('checkbox');

我在这里使用了getElementsByClassName,以便我们可以轻松获取作为特定表单子(monad)项的复选框。不幸的是,HTMLElement 只有 getElementsByTagNamegetElementsByClassName,因此我们不能在这里轻松使用名称。

for (var i = 0; i < elems.length; i++) {
if (elems[i].checked) {
    ++count;
}

您会在这里看到我考虑了已经选中的复选框。这样,如果您默认选中了 1 个,则如果您的限制为 5 个,则可以选中另外 4 个。

 elems[i].addEventListener('click', function() {
    if (this.checked) {

    if (count + 1 > limit) {
        alert ("no more than " + limit + " must be checked");
      this.checked = false;
      return false;
    }
    ++count;
  } else {
    --count;

    if (count < 0) {
        count = 0;
    }
  }
});

在这里,我们不是在取消选中某个框时添加 0,而是减少计数。这样,如果我们取消勾选并再次勾选,同一个框就不会计数两次。

关于javascript - 涉及数组时限制选中的框数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35167122/

相关文章:

javascript - 不断运行 JavaScript?

javascript - fullCalendar dayClick 转到被单击的日期

javascript - 如何从 Mysql、php 创建一个事件的动态条形图?

javascript - 在 Javascript 中使用 JSON 值

iphone - 如何连续获得不两次相同的数组值

javascript - 从 Haml 在外部 javascript 中调用 ruby​​ 数组

javascript - 如何在代码之间使用ActivityIndi​​cator?

php - PDO 查询未更新

php - Laravel 仓库模式解释

php - 难题 - 如何从 PHP 中提取图像的 'colorify' 部分?