javascript - 在复选框限制后显示消息(多个实例)

标签 javascript jquery

如果 checkbox 限制仅适用于每个 .checkboxdiv 下的复选框,我如何在每个实例的基础上显示 .checkboxmsg

limit = 0; //set limit

checkboxes = document.querySelectorAll('.checkboxdiv input[type="checkbox"]'); //select all checkboxes

function checker(elem) {
  if (elem.checked) { //if checked, increment counter
    limit++;
  } else {
    limit--; //else, decrement counter
  }

  for (i = 0; i < checkboxes.length; i++) { // loop through all 

    if (limit == 2) {
      if (!checkboxes[i].checked) {
        checkboxes[i].disabled = true;  
        document.getElementsByClassName("checkboxmsg")[0].style.display = "block"
        

      }

    } else { //if limit is less than two

      if (!checkboxes[i].checked) {
        checkboxes[i].disabled = false;  document.getElementsByClassName("checkboxmsg")[0].style.display = "none"
      }

    }
  }

}

for (i = 0; i < checkboxes.length; i++) {
  checkboxes[i].onclick = function() { //call function on click and send current element as param
    checker(this);
  }
}
.checkboxmsg{
 display: none;
 color : red !important;
}
.checkboxdiv {
  border: 2px solid
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="checkboxdiv">
  <input type="hidden" name="check" value="">
  <input type="checkbox" name="check" value="One"><label>One</label> <br/>
  <input type="checkbox" name="check" value="Two"><label>Two</label> <br/>
  <input type="checkbox" name="check" value="Three"><label>Three</label>
</div>
<div class="checkboxdiv">
  <input type="hidden" name="check" value="">
  <input type="checkbox" name="check" value="One"><label>One</label> <br/>
  <input type="checkbox" name="check" value="Two"><label>Two</label> <br/>
  <input type="checkbox" name="check" value="Three"><label>Three</label>
</div>
<div class="checkboxmsg">Only two options are allowed</div>

最佳答案

jQuery 版本

使用 $(this).closest('.checkboxdiv') 找到事件复选框的父级

https://api.jquery.com/closest/

var limit = 2;

$(':checkbox').change(function(){
  var checked = 0;
  var parent = $(this).closest('.checkboxdiv');
  parent.find('.checkboxmsg').hide();
  parent.find(':checkbox').each(function(){
    if ($(this).is(':checked')) {
      checked++;

      // check if limit is reached
      if (checked >= limit) {
        parent.find(":checkbox:not(:checked)").attr('disabled', true);
        parent.find('.checkboxmsg').show();
      } else {
        parent.find(":checkbox").attr('disabled', false);
      }

    }
  });
});
.checkboxmsg{
 display: none;
 color : red !important;
}
.checkboxdiv {
  border: 2px solid
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="checkboxdiv">
  <input type="hidden" name="check" value="">
  <input type="checkbox" name="check" value="One"><label>One</label> <br/>
  <input type="checkbox" name="check" value="Two"><label>Two</label> <br/>
  <input type="checkbox" name="check" value="Three"><label>Three</label>
  <div class="checkboxmsg">Only two options are allowed</div>
</div>
<div class="checkboxdiv">
  <input type="hidden" name="check" value="">
  <input type="checkbox" name="check" value="One"><label>One</label> <br/>
  <input type="checkbox" name="check" value="Two"><label>Two</label> <br/>
  <input type="checkbox" name="check" value="Three"><label>Three</label>
  <div class="checkboxmsg">Only two options are allowed</div>
</div>

关于javascript - 在复选框限制后显示消息(多个实例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50402869/

相关文章:

javascript - 如果对象包含另一个数组中存在值的属性,则过滤对象数组

javascript - 替代css3而不是选择器

javascript - 当有多个相同的 css 类时,使用 jQuery val() 获取正确的值

javascript - 使用 JS/jquery 检查数组中唯一的 $(this) 元素

jquery - 无序列表是否响应 CSS 转换?

javascript - 我如何在 e2e 测试 Angular Protractor 中的标签中添加文本

javascript - 调用带有多个闭包的 javascript 函数

javascript - 从单独的窗口访问 JavaScript 对象

javascript - 从在 angularJs 中动态创建的输入中查找总数

php - 如何从 PHP 访问我的 json 编码数据到 mysql 查询中