事件委托实现多选框全选/反选,核心是监听父容器click事件,通过event.target判断点击目标:若为.select-all则同步所有[name="item"]复选框状态;若为[name="item"]则更新全选框状态。

用事件委托实现多选框全选/反选,核心是把点击事件绑定在父容器上,通过 event.target 判断是否点中了“全选”复选框或普通选项,再统一控制所有子复选框的状态。这样既节省监听器数量,又支持动态添加的选项。
HTML 结构要清晰,有明确的父子关系
确保所有待操作的复选框(包括全选框)都在同一个父容器内,且能通过选择器区分:
<div id="checkbox-container"> <label><input type="checkbox" class="select-all"> 全选</label><br><label><input type="checkbox" name="item" value="1"> 选项 1</label><br><label><input type="checkbox" name="item" value="2"> 选项 2</label><br><label><input type="checkbox" name="item" value="3"> 选项 3</label><br> </div>
绑定事件委托,监听父容器的 click
只给父容器加一个事件监听器,用 event.target 检查点击目标:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 如果点中的是
.select-all,就同步所有[name="item"]复选框的状态为它的checked值 - 如果点中的是任意一个
[name="item"],就检查是否所有选项都已勾选,更新全选框状态
JavaScript 实现逻辑(含反选兼容)
下面是一段简洁可靠的代码,支持点击全选框、单个选项,也支持点击文字标签触发(因为 <label></label> 会自动聚焦到关联的 input):
const container = document.getElementById('checkbox-container');
container.addEventListener('click', function (e) {
const target = e.target;
// 点击的是全选框
if (target.classList.contains('select-all')) {
const items = this.querySelectorAll('[name="item"]');
items.forEach(cb => cb.checked = target.checked);
}
// 点击的是某个选项(包括通过 label 触发)
else if (target.name === 'item') {
const items = this.querySelectorAll('[name="item"]');
const allChecked = [...items].every(cb => cb.checked);
this.querySelector('.select-all').checked = allChecked;
}
});
可选:增加反选功能(点击全选框时切换状态)
如果希望“全选框”点击一次全选、再点一次全不选(即传统反选),上面逻辑已满足。若想更进一步——比如长按或右键反选,或单独加一个「反选」按钮,则需额外处理。但日常场景中,仅靠切换 checked 就是标准反选行为。
注意:确保所有复选框都使用 name="item"(或其他统一 name),且全选框有 class="select-all",否则选择器会失效。动态插入的新选项也会自动生效,无需重新绑定事件。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










