
本教程详细介绍了如何处理动态生成的html表格中,根据用户勾选的复选框来计算对应行特定列(如余额)的总和。文章首先分析了常见错误,随后提供了两种解决方案:一种是修正dom元素选择逻辑,确保只计算选中行的值;另一种是更高效的方法,通过将数值直接存储在复选框的`data`属性中,从而优化计算性能,并给出了完整的html、php和j*ascript代码示例及最佳实践。
在Web开发中,经常需要处理用户交互界面,例如在一个包含多行数据的表格中,允许用户选择特定行并对这些行的数据进行汇总计算。一个典型的场景是计算用户选中的发票或商品的余额总和。本教程将以一个动态生成的发票列表为例,详细讲解如何实现这一功能,并提供两种有效的J*aScript(结合jQuery)解决方案。
首先,我们需要一个基本的HTML表格结构,其中包含一个用于显示总和的区域,以及一个用于全选的复选框。表格的行数据将通过PHP从数据库中动态生成。
HTML结构示例:
<h1>发票列表</h1>
<h2>已选发票总金额:AED <span id="totalsum">0.00</span></h2>
<table border="1" id="rcpt">
<thead>
<tr>
<th><input id="selectAll" type="checkbox" /></th>
<th>发票号</th>
<th>日期</th>
<th>余额</th>
</tr>
</thead>
<tbody>
<!-- PHP动态生成的行将插入此处 -->
</tbody>
</table>PHP动态生成表格行示例:
PHP代码负责从数据库查询数据,并将其格式化为HTML表格行。关键在于为每个复选框添加必要的类名(checkbox)和名称(select[]),并为余额单元格添加类名(balance),以便J*aScript能够准确地选中和读取这些元素。
<?php
// 假设 $conn 是已建立的数据库连接
$query = 'SELECT id, cinv_no, cinv_date, cinv_bal FROM invoices_table'; // 示例查询
$sql = mysqli_query($conn, $query);
if ($sql) {
while ($result = mysqli_fetch_array($sql)) {
$id = htmlspecialchars($result['id']);
$inv_no = htmlspecialchars($result['cinv_no']);
$inv_date = date("d-m-Y", strtotime($result['cinv_date']));
$inv_bal = number_format($result['cinv_bal'], 2); // 格式化余额,保留两位小数
echo '<tr>';
// 注意:这里可以为复选框添加 data-value 属性,以便后续优化
echo '<td><input type="checkbox" class="checkbox" name="select[]" value="' . $id . '" data-value="' . htmlspecialchars($result['cinv_bal']) . '" /></td>';
echo '<td>' . $inv_no . '</td>';
echo '<td>' . $inv_date . '</td>';
echo '<td class="balance">' . $inv_bal . '</td>';
echo '</tr>';
}
} else {
echo '<tr><td colspan="4">查询失败或无数据。</td></tr>';
}
?>注意: 在PHP代码中,我们已经预先为复选框添加了data-value属性,其值为原始的未格式化余额。这为后续的优化方案做准备。同时,对输出数据进行htmlspecialchars处理以防止XSS攻击。
在实现求和功能时,一个常见的错误是J*aScript逻辑未能正确关联复选框与其对应的余额单元格。
错误的J*aScript求和逻辑示例:
// 假设的初始(错误)的 updateSum 函数
function updateSum_incorrect() {
var total = 0;
var select = $(".checkbox:checked"); // 选中所有被勾选的复选框
var balance = $(".balance"); // 选中所有余额单元格
// 问题所在:这里遍历的是选中的复选框,但却试图使用所有 .balance 元素的HTML内容
// 导致无论哪个复选框被选中,它总是从第一个 .balance 元素开始取值,而不是对应行的值
select.each(function() {
total += parseFloat(balance.html().replace(/,/g, ''));
});
$("#totalsum").html(total.toFixed(2));
}上述代码的问题在于,balance变量获取的是页面上所有具有class="balance"的元素集合。在select.each()循环中,balance.html()总是返回集合中第一个元素的HTML内容。因此,无论哪个复选框被选中,它都会重复地将第一个余额值添加到总和中,导致计算结果不正确。
为了解决上述问题,我们需要确保在遍历每个被选中的复选框时,能够准确地找到其所在行的余额单元格。这可以通过DOM遍历来实现。
芝士饼
芝士饼是一个一站式AI原生应用开发平台,简单几步即可完成应用的创建与发布。
84
查看详情
修正后的 updateSum 函数:
function updateSum() {
var total = 0;
// 遍历所有被勾选的复选框
$(".checkbox:checked").each(function() {
// 找到当前复选框的父<tr>元素,然后在其内部查找具有 .balance 类的<td>元素
const balanceElement = $(this).parents('tr').find('.balance');
// 获取余额文本,移除逗号,转换为浮点数并累加
total += parseFloat(balanceElement.text().replace(/,/g, ''));
});
// 更新总和显示
$("#totalsum").text(total.toFixed(2));
}
// 全选/取消全选功能
function toggleAll(sourceCheckbox) {
$('.checkbox').prop('checked', sourceCheckbox.checked);
updateSum(); // 全选/取消全选后也需要更新总和
}
// 事件绑定
$(document).ready(function() {
// 为每个复选框绑定点击事件
$('.checkbox').on('click', updateSum);
// 为全选复选框绑定点击事件
$('#selectAll').on('click', function() {
toggleAll(this);
});
// 页面加载时初始化总和
updateSum();
});解释:
虽然上述方法是正确的,但每次计算都需要进行DOM遍历来查找对应的.balance元素。对于大型表格,这可能会带来一定的性能开销。一个更高效的解决方案是将余额值直接存储在复选框的HTML data属性中。
PHP生成的HTML(已包含 data-value 属性):
如前文PHP代码所示,我们在生成复选框时,已经添加了data-value属性,其值是未格式化的原始余额。
<!-- 示例行,data-value 存储了原始余额 --> <tr> <td><input type="checkbox" class="checkbox" name="select[]" value="2" data-value="56842.50" /></td> <td>INV-2025-0001</td> <td>31-05-2025</td> <td class="balance">56,842.50</td> </tr>
优化后的J*aScript代码:
// 更新总和的函数
const updateTotal = () => {
const total = $(".checkbox:checked") // 选中所有被勾选的复选框
.map(function() {
// 从每个被勾选的复选框的 data-value 属性中获取余额值
return parseFloat($(this).data('value'));
})
.toArray() // 将jQuery对象转换为原生数组
.reduce((accumulator, currentValue) => accumulator + currentValue, 0); // 使用reduce方法求和
$('#totalsum').text(total.toFixed(2)); // 更新总和显示
};
// 全选/取消全选的函数
const toggleAll = (checked) => {
$('.checkbox').prop('checked', checked);
};
// 事件绑定
$(document).ready(function() {
// 为每个普通复选框绑定点击事件,每次点击都更新总和
$('.checkbox').on('click', updateTotal);
// 为全选复选框绑定点击事件
$('#selectAll').on('click', function() {
toggleAll($(this).is(':checked')); // 根据全选复选框的状态设置所有复选框的状态
updateTotal(); // 全选/取消全选后更新总和
});
// 页面加载时初始化总和
updateTotal();
});解释:
本教程展示了两种在动态生成的HTML表格中,根据复选框选择计算总和的方法。第一种方法通过DOM遍历精确查找对应行的余额,解决了初始逻辑错误。第二种方法则通过将数值存储在复选框的data属性中,显著提高了性能和代码简洁性,是更推荐的实现方式。在实际开发中,根据项目需求和性能考量,选择合适的方案,并结合最佳实践,能够构建出健壮高效的用户界面。
以上就是动态表格复选框值求和教程的详细内容,更多请关注php中文网其它相关文章!
# php
# 简单网站建设试卷
# 景洪seo优化公司
# 重庆网站建设订制推荐
# 眉山网站官网建设
# 白山市营销推广团队
# 网站建设设计专业
# 课程营销推广方案模板
# 高密网站优化多少钱
# 问答营销推广法
# 第一个
# 回调
# 单元格
# 勾选
# 转换为
# 的是
# 绑定
# 遍历
# 全选
# 复选框
# 点
# 常见问题
# 回调函数
# 正则表达式
# ajax
# html
# jquery
# java
# javascript
# mysql
# 欧洲网站建设素材图片
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
CodeIgniter 3 中基于 MySQL 数据高效生成动态图表教程
J*aScript装饰器_元编程实战
店铺如何做视频号推广?做视频号推广有用吗?
OPPO A3 WiFi频繁断开怎么办 OPPO A3网络优化技巧
抖音赚钱快速入门_新手必看的抖音赚钱步骤
win11自带录屏文件保存在哪里 Win11 Game Bar录制视频默认路径【分享】
Linux如何自动分析系统异常日志_Linux日志智能检测
PDF文件去水印平台入口 PDF水印删除网址
风车动漫官网首页入口登录 风车动漫在线观看正版地址
Go App Engine 项目结构与包管理深度指南
《小黑盒》删除历史浏览方法
iPhone17Pro如何连接蓝牙耳机_iPhone17Pro蓝牙设备配对与连接方法介绍
动漫岛汉化官网网 动漫岛官方动漫汉化地址
如何快速去除厨房重油污? 2025年最好用的厨房清洁剂推荐
Win10如何关闭开机锁屏界面_Windows10跳过锁屏直接登录设置
C++ virtual析构函数作用_C++基类虚析构函数防止内存泄漏
c++如何实现观察者设计模式_c++行为型设计模式实战
Win10如何关闭操作中心通知 Win10免打扰设置全攻略【清爽】
海棠阅读网页版_进入海棠网页版在线阅读中心
《大学搜题酱》官网地址登录
我的世界官方网址入口 我的世界游戏主页直达入口
C++中的explicit关键字有什么作用_C++类型转换控制与explicit使用
为什么XML解析器对大小写敏感? 理解XML规范中的大小写规则与最佳实践
原子笔记app误删找回教程
C++如何实现矩阵乘法_C++二维数组矩阵运算代码示例
C++中std::thread和std::async的区别_C++并发编程与线程与异步任务比较
PHP多语言网站的实现:会话管理与翻译函数优化教程
yandex网页版直接登录 yandex官方入口平台访问方法
Python测试中模块导入路径解析的最佳实践
《知到》打卡课程方法
《磁力猫》最好用的磁官网
b站怎么用微信登录_b站微信登录方法
苹果手机手电筒无法开启
Firefox OS应用开发:解决XMLHttpRequest跨域请求阻塞问题
SQLAlchemy 2.0 与 Pydantic 模型类型安全集成指南
《暗黑破坏神4》国服回归送狂欢礼包 价值6916元
解决CSS background 属性中 cover 关键字的常见误用
三星A55应用闪退排查步骤_Samsung A55稳定性优化技巧
win11怎么启用或禁用休眠 Win11 powercfg命令管理休眠文件【技巧】
word页码灰色不能用如何解决
小米手机截图后如何查看历史_小米手机截图历史记录查看方法
如何在mysql中使用索引提示_mysql索引提示优化方法
《跳跳舞蹈》循环播放方法
在PySimpleGUI中实现键盘按键绑定按钮事件
小米civi如何设置锁屏时间
J*aScript实现下拉菜单驱动的动态表格数据展示
胃动力不足?试试这5个调理方法
使用Python和GBGB API高效抓取指定日期范围和赛道比赛结果教程
鸣潮历史学家灯塔位置一览
铁路12306买票怎么选双人铺 铁路12306卧铺分配规则说明
2025-11-08
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。