
在网页开发中,我们经常遇到需要在一组复选框中提供一个“全选”功能,以便用户快速选中或取消选中所有相关选项。当页面上存在多组独立的复选框集合时,例如在不同的分类或区域中,每组都需要有自己的“全选”功能,且彼此之间不能相互影响。
为了实现这一目标,关键在于设计合理的HTML结构,并利用jQuery的选择器和DOM遍历方法来限定操作范围。
推荐的HTML结构如下:
<div class="actions" id="actions" title="Actions">
<!-- 第一组复选框 -->
<div class="myDiv">
<div><input type="checkbox" name="action" class="selectAll" value="0" /> Select All</div><br />
<div><input type="checkbox" name="action" value="1" /> Item 1</div><br />
<div><input type="checkbox" name="action" value="2" /> Item 2</div><br />
<div><input type="checkbox" name="action" value="3" /> Item 3</div><br />
</div>
<!-- 第二组复选框 -->
<div class="myDiv">
<div><input type="checkbox" name="action" class="selectAll" value="26" />Select All</div><br />
<div><input type="checkbox" name="action" value="27" /> Item A</div><br />
<div><input type="checkbox" name="action" value="28" /> Item B</div><br />
<div><input type="checkbox" name="action" value="29" /> Item C</div><br />
<div><input type="checkbox" name="action" value="30" /> Item D</div><br />
<div><input type="checkbox" name="action" value="31" /> Item E</div>
</div>
</div>结构要点:
我们将通过两个主要的事件监听器来实现“全选/全不选”功能:一个用于处理“全选”复选框的点击事件,另一个用于处理组内其他普通复选框的点击事件。
当用户点击一个“全选”复选框时,我们需要根据其当前选中状态,来勾选或取消勾选同组内的所有其他复选框。
$('.selectAll').on('click', function() {
// 获取当前“全选”复选框的选中状态
let isSelected = $(this).is(':checked');
// 找到当前“全选”复选框所属的最近的父级 .myDiv 元素
// 然后在该父级内查找所有类型为 checkbox 的 input 元素
$(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');
// 获取该组内“全选”复选框的DOM元素
let selectAllCheckbox = $parentDiv.find('.selectAll')[0];
// 获取该组内所有非“全选”复选框的数量
let totalIndividualInputs = $parentDiv.find('input:not(".selectAll")').length;
// 获取该组内所有已选中的非“全选”复选框的数量
let checkedIndividualInputs = $parentDiv.find('input:checked:not(".selectAll")').length;
// 逻辑判断:
// 1. 如果“全选”复选框当前是选中状态,但有任何一个独立复选框被取消选中,则取消“全选”。
if (selectAllCheckbox.checked && checkedIndividualInputs < totalIndividualInputs) {
selectAllCheckbox.checked = false;
}
// 2. 如果所有独立复选框都被选中,则勾选“全选”。
else if (totalIndividualInputs === checkedIndividualInputs) {
selectAllCheckbox.checked = true;
}
});代码解析:
将上述HTML结构和jQuery代码结合起来,并在页面中引入jQuery库,即可实现所需功能。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>jQuery多组全选复选框</title>
<!-- 引入jQuery库 -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<style>
.myDiv {
border: 1px solid #ccc;
padding: 10px;
margin-bottom: 15px;
background-color: #f9f9f9;
}
.myDiv div {
margin-bottom: 5px;
}
</style>
</head>
<body>
<div class="actions" id="actions" title="Actions">
<div class="myDiv">
<div><input type="checkbox" name="action" class="selectAll" value="0" /> **Select All Actions**</div><br />
<div><input type="checkbox" name="action" value="1" /> View Profile</div><br />
<div><input type="checkbox" name="action" value="2" /> Edit Settings</div><br />
<div><input type="checkbox" name="action" value="3" /> Delete Account</div><br />
</div>
<div class="myDiv">
<div><input type="checkbox" name="action" class="selectAll" value="26" />**Select All Permissions**</div><br />
<div><input type="checkbox" name="action" value="27" /> Read Access</div><br />
<div><input type="checkbox" name="action" value="28" /> Write Access</div><br />
<div><input type="checkbox" name="action" value="29" /> Execute Access</div><br />
<div><input type="checkbox" name="action" value="30" /> Admin Rights</div><br />
<div><input type="checkbox" name="action" value="31" /> Audit Logs</div>
</div>
</div>
<script>
$(document).ready(function() {
// 全选复选框的点击事件
$('.selectAll').on('click', function() {
let isSelected = $(this).is(':checked');
$(this).parents('.myDiv').find('input[type="checkbox"]').prop('checked', isSelected);
});
// 非全选复选框的点击事件
$('input:not(".selectAll")').on('click', function() {
let $parentDiv = $(this).parents('.myDiv');
let selectAllCheckbox = $parentDiv.find('.selectAll')[0];
let totalIndividualInputs = $parentDiv.find('input:not(".selectAll")').length;
let checkedIndividualInputs = $parentDiv.find('input:checked:not(".selectAll")').length;
// 如果全选已勾选,但有子项被取消勾选,则取消全选
if (selectAllCheckbox.checked && checkedIndividualInputs < totalIndividualInputs) {
selectAllCheckbox.checked = false;
}
// 如果所有子项都被勾选,则勾选全选
else if (totalIndividualInputs === checkedIndividualInputs) {
selectAllCheckbox.checked = true;
}
});
});
</script>
</body>
</html>通过上述方法,我们成功地利用jQuery实现了在多个独立容器中管理“全选/全不选”复选框的功能。核心在于通过清晰的HTML结构定义组的边界,并结合jQuery强大的DOM遍历和事件处理能力,将操作范围精确地限定在每个独立的复选框组内部,从而实现互不干扰的独立控制。这种模式在构建复杂表单或数据筛选界面时非常实用。
以上就是使用jQuery在独立容器中管理“全选/全不选”复选框功能的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号