javascript - 如何使用for循环获得多个拨动开关的真假?
问题描述
https://www.w3schools.com/code/tryit.asp?filename=GKTIU8SG2RMP
document.addEventListener('DOMContentLoaded', function () {
var checkbox = document.querySelector('input[type="checkbox"]');
checkbox.addEventListener('change', function () {
if (checkbox.checked) {
// do this
console.log('Checked');
} else {
// do that
console.log('Not checked');
}
});
});
在链接上方,当单击第一个按钮时,我完美地获得了它的状态(选中或未选中)。但是,对于第二个按钮,它不显示状态(选中或未选中)。我该如何解决这个问题?非常感谢您的关注。注意:我正在为按钮使用 for 循环,因此会有很多按钮,如果解决方案是一一声明按钮,则效率低下。
解决方案
querySelector
找到与选择器匹配的第一个元素。如果要查找多个,请使用querySelectorAll
which 返回 a NodeList
(类似于数组)。例如:
function checkboxChangeHandler() {
if (this.checked) { // <== Note use of `this`
// do this
console.log('Checked');
} else {
// do that
console.log('Not checked');
}
}
document.addEventListener('DOMContentLoaded', function () {
var checkboxes = document.querySelectorAll('input[type="checkbox"]');
checkboxes.forEach(function(checkbox) {
checkbox.addEventListener('change', checkboxChangeHandler);
});
});
注意:该代码是用 ES5 编写的,因为您的原始代码是,但通常我会使用 ES2015+ 特性const
和可迭代性。
注 2:该代码依赖于2017 年左右添加的forEach
方法。NodeList
但是对于过时的环境,它很容易填充,我在另一个 SO 答案中描述了如何。
推荐阅读
- r - R:如何在现有的 R 时间序列类中创建具有多个时间尺度的时间序列对象?
- java - AWS S3 Java SDK 是否支持 socks 代理?
- angular - Angular 表单在 Internet Explorer 11 中不起作用
- kubernetes - 如何使用 Codefresh 设置和部署 Kubeflow
- python - 将 python 中使用的库的日志发送到谷歌云堆栈驱动程序日志记录
- sql - 将多行/多列中的文本连接成一个字符串
- node.js - docker 无法从 localhost 访问容器
- java - 无效参数异常后如何退出 ChromeDriver
- python - 如何在数据框的列中用不同的字符串替换字符串
- javascript - Framer-motion,在动画 x 时延迟 rotateY