
在复杂的表单或数据展示场景中,我们常常需要对一组复选框进行“全选”或“全不选”的操作。当页面存在多个独立的复选框组时,每个组都需要有自己的“全选”功能,且彼此之间互不影响。实现这一功能的核心在于:
基于上述原则,我们将原始HTML结构进行优化,引入myDiv类来标识独立的复选框组,并引入selectAll类来标识“全选”复选框。
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="actions" id="actions" title="Actions">
<!-- 第一个复选框组 -->
<div class="myDiv">
<div><input type="checkbox" name="action" id="" class="selectAll" value="0" /> Select All</div><br />
<div><input type="checkbox" name="action" id="" class="" value="1" /> Item 1</div><br />
<div><input type="checkbox" name="action" id="" class="" value="2" /> Item 2</div><br />
<div><input type="checkbox" name="action" id="" class="" value="3" /> Item 3</div><br />
</div>
<!-- 第二个复选框组 -->
<div class="myDiv">
<div><input type="checkbox" name="action" id="" class="selectAll" value="26" />Select All</div><br />
<div><input type="checkbox" name="action" id="" class="" value="27" /> Item 27</div><br />
<div><input type="checkbox" name="action" id="" class="" value="28" /> Item 28</div><br />
<div><input type="checkbox" name="action" id="" class="" value="29" /> Item 29</div><br />
<div><input type="checkbox" name="action" id="" class="" value="30" /> Item 30</div><br />
<div><input type="checkbox" name="action" id="" class="" value="31" /> Item 31</div>
</div>
</div>在上述代码中,我们用myDiv类包裹了每个独立的复选框组,并在每个组的“Select All”复选框上添加了selectAll类。
接下来,我们将使用jQuery编写两个主要的事件处理器,分别处理“全选”复选框和普通复选框的点击事件。
当用户点击“全选”复选框时,我们需要根据其当前选中状态,同步更改同组内所有其他复选框的选中状态。
$('.selectAll').on('click', function() {
// 获取当前“全选”复选框的选中状态
let isSelected = $(this).is(':checked');
// 向上查找最近的父级 .myDiv 元素,然后在其内部查找所有复选框
$(this).parents('.myDiv').find('input[type="checkbox"]').each(function() {
// 设置所有同组复选框的选中状态与“全选”复选框一致
$(this).prop('checked', isSelected);
});
});解释:
当用户点击组内任意一个普通复选框时,我们需要根据该组内所有普通复选框的选中状态,动态更新“全选”复选框的状态。具体逻辑是:如果所有普通复选框都被选中,则“全选”复选框也应被选中;否则,如果“全选”复选框原本是选中的,则应取消选中。
$('input:not(".selectAll")').on('click', function() {
// 获取当前复选框所在的父级 .myDiv 元素
let $parentDiv = $(this).parents('.myDiv');
// 获取该组内的“全选”复选框
let $selectAllCheckbox = $parentDiv.find('.selectAll');
// 统计该组内除了“全选”复选框之外的所有复选框的数量
let totalCheckboxes = $parentDiv.find('input:not(".selectAll")').length;
// 统计该组内除了“全选”复选框之外所有已选中的复选框的数量
let checkedCheckboxes = $parentDiv.find('input:checked:not(".selectAll")').length;
// 如果所有普通复选框都被选中,则选中“全选”复选框
if (totalCheckboxes === checkedCheckboxes) {
$selectAllCheckbox.prop('checked', true);
} else {
// 否则,取消选中“全选”复选框
$selectAllCheckbox.prop('checked', false);
}
});解释:
将上述两个逻辑整合到一起,并确保在DOM加载完成后执行:
$(document).ready(function() {
// 1. “全选/全不选”复选框的控制逻辑
$('.selectAll').on('click', function() {
let isSelected = $(this).is(':checked');
$(this).parents('.myDiv').find('input[type="checkbox"]').prop('checked', isSelected);
});
// 2. 普通复选框的联动控制逻辑
$('input:not(".selectAll")').on('click', function() {
let $parentDiv = $(this).parents('.myDiv');
let $selectAllCheckbox = $parentDiv.find('.selectAll');
let totalCheckboxes = $parentDiv.find('input:not(".selectAll")').length;
let checkedCheckboxes = $parentDiv.find('input:checked:not(".selectAll")').length;
// 如果所有普通复选框都被选中,则选中“全选”复选框
if (totalCheckboxes === checkedCheckboxes) {
$selectAllCheckbox.prop('checked', true);
} else {
// 否则,取消选中“全选”复选框
$selectAllCheckbox.prop('checked', false);
}
});
});$(document).on('click', '.selectAll', function() { /* ... */ });
$(document).on('click', 'input:not(".selectAll")', function() { /* ... */ });这将使事件监听器即使在元素被动态添加到DOM后也能正常工作。
通过本教程,我们学习了如何利用jQuery为多区域复选框实现智能的“全选”与“反选”联动功能。核心在于清晰的HTML结构设计(使用共同的父容器类和特定类来标识“全选”复选框),以及精确的jQuery选择器和事件处理逻辑。这不仅提升了用户界面的交互性,也大大简化了前端开发中的复选框管理任务。掌握这些技巧,将有助于构建更健壮、用户体验更佳的Web应用。
以上就是jQuery实现多区域复选框联动控制:全选与反选功能指南的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号