限制 javascript 自动生成的复选框的数量

Posted

技术标签:

【中文标题】限制 javascript 自动生成的复选框的数量【英文标题】:Limit number of javascript automated generated checkbox 【发布时间】:2020-11-16 02:29:22 【问题描述】:

有点担心以下代码应该自动生成复选框内容并限制最多 3 个复选框。

两个代码分别工作正常,当它们组合时出现问题:

Fiddle

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

var skills = ["centres", "tirs", "dribbles", "passes", "vitesse"]
var skillContainer = $("#skillsContainer");
skills.forEach(skill => skillContainer.append('<li> <input type=\"checkbox\" id=\"' + skill + '\" value=\"' + skill + '\"> <label for=\"' + skill + '\"> ' + skill + ' </label> </li>'));

$("#skillsContainer").append(checkboxElement);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form name="competencies" action="algo.php" method="POST">

  <div class="container">
    <ul class="ks-cboxtags" id="skillsContainer">
      <input class="button" type="submit" value="Valider">
    </ul>
  </div>
</form>

【问题讨论】:

我给你做了一个sn-p。您的代码中没有 checkboxElement 【参考方案1】:

你是说这个吗?

创建动态元素时需要委托

或者在生成之后添加事件处理程序

$('#skillsContainer').on("change", 'input[type=checkbox]', function(e) 
  if ($('input[type=checkbox]:checked').length > 3) 
    $(this).prop('checked', false);
  
)

var skills = ["centres", "tirs", "dribbles", "passes", "vitesse"]
$("#skillsContainer").html(skills.map(skill => '<li> <input type=\"checkbox\" id=\"' + skill + '\" value=\"' + skill + '\"> <label for=\"' + skill + '\"> ' + skill + ' </label> </li>').join(""));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form name="competencies" action="algo.php" method="POST">

  <div class="container">
    <ul class="ks-cboxtags" id="skillsContainer">
      <input class="button" type="submit" value="Valider">
    </ul>
  </div>
</form>

【讨论】:

只需为这个完美的答案添加一点注释。 OP 代码不起作用,因为当它逐行运行时,没有诸如输入复选框之类的元素,因此$('input[type=checkbox]') 找不到任何东西,change 事件也不起作用。因此更改代码的顺序也可以解决您的问题(将change 事件移至底部)。 @SMAKSS 是的,应该详细说明。我已经更新了我的答案 @mplungjan 和 SMAKSS,它就像一个魅力!非常感谢!【参考方案2】:

javascript检查复选框长度

var eLength = element.length;
var i = 0;
var checkedCheck;
checkbox.forEach(checkBox => 
     checkBox.addEventListener('click',function()
          if(this.checked)
              i++;
              if(i > 3)
                  checkBox.disabled = true;
                  alert('Limit reached');
              
        
    );
);

【讨论】:

以上是关于限制 javascript 自动生成的复选框的数量的主要内容,如果未能解决你的问题,请参考以下文章

jquery限制div中的复选框

计算使用 jquery 检查的 html 复选框的数量

我知道网页可以拥有的样式表的数量是有限制的,但是附加的 javascript 文件呢?

javascript如何在窗体中控制弹出网页的数量?

通过在 JavaScript 中检索它们的值来自动选择复选框 [重复]

javascript 验证复选框(类似于单选按钮),生成scrollTo错误消息