javascript - 如果使用javascript选中了其他复选框,如何选中一个复选框?
问题描述
var select_all = document.getElementById("select_all"); //select all checkbox
var checkboxes = document.getElementsByName("testc"); //checkbox items
//select all checkboxes
select_all.addEventListener("change", function(e) {
for (i = 0; i < checkboxes.length; i++) {
checkboxes[i].checked = select_all.checked;
}
});
for (var i = 0; i < checkboxes.length; i++) {
checkboxes[i].addEventListener('change', function(e) { //".checkbox" change
//uncheck "select all", if one of the listed checkbox item is unchecked
if (this.checked == false) {
select_all.checked = false;
}
//check "select all" if all checkbox items are checked
if (document.querySelectorAll('.checkbox:checked').length == checkboxes.length) {
select_all.checked = true;
}
});
}
<li><input type="checkbox" id="select_all" /> Selecct All</li>
<ul>
<li><input class="checkbox" type="checkbox" name="testc"> This is Item 1</li>
<li><input class="checkbox" type="checkbox" name="testc"> This is Item 2</li>
<li><input class="checkbox" type="checkbox" name="testc"> This is Item 3</li>
<li><input class="checkbox" type="checkbox" name="testc"> This is Item 4</li>
<li><input class="checkbox" type="checkbox" name="testc"> This is Item 5</li>
<li><input class="checkbox" type="checkbox" name="testc"> This is Item 6</li>
</ul>
上面的代码工作正常。但这里下面的部分是检查CSS
应用checkboxes
条件的。我想检查的名称checkboxes
。寻找解决方案?
//check "select all" if all checkbox items are checked
if (document.querySelectorAll('.checkbox:checked').length == checkboxes.length) {
select_all.checked = true;
}
});
解决方案
- 当
change
事件冒泡时,您可以addEventListener
在父元素上。 - 用于
find()
检查是否未检查一个输入。 - 如果要按名称选择,请使用
input[name="testc"]
- 如果
#select_all
检查了某些输入,状态会怎样?
var checkall = document.getElementById("select_all")
var ul = document.querySelector('ul#checkbox-list')
var checkboxes = Array.from(ul.querySelectorAll('input[name="testc"]')) /* 3 */
checkall.addEventListener('change', () => {
checkboxes.forEach(elm => (elm.checked = checkall.checked))
})
ul.addEventListener('change', () => { /* 1. */
checkall.checked = !checkboxes.find(elm => !elm.checked) /* 2. */
})
这里解决的更强大的例子/* 4. */
:https ://codepen.io/yukulele/pen/PNNdvw?editors=0010
推荐阅读
- python-3.x - 将 Zoom Recordings 下载到本地计算机并使用 Resumable Upload Method 将视频上传到 Google Drive
- node.js - 无法弄清楚为什么 docker compose up 没有运行我的 React JS 应用程序
- javascript - 电子表格中的最大脚本数
- ruby-on-rails - Rails:为什么我会失去关联?
- promise - 使用 Storyblok-nuxt 发送多个 .get() 请求
- javascript - 如何从具有多个对象的平面列表中设置和获取不同的状态和输入
- javascript - 当 jQuery .match() 从列表项返回部分匹配时,如何将结果限制为完全匹配?
- postgresql - 如何使用 Postgres 数据库 url 字符串传递证书路径以进行 SSL 连接
- c++ - 如何基于 UML 图在 C++ 中设计策略模式类?
- file - Makefile 模式背后的逻辑是什么?