在Web开发中,经常需要统计表格中被用户选中或切换的行数。jQuery是一个流行的JavaScript库,可以简化DOM操作和事件处理,非常适合这类任务。
// 假设表格有checkbox列用于选择行
$(document).ready(function() {
let changedRowCount = 0;
// 监听所有行checkbox的变化
$('table input[type="checkbox"]').change(function() {
if($(this).is(':checked')) {
changedRowCount++;
} else {
changedRowCount--;
}
console.log('当前切换的行数: ' + changedRowCount);
});
});
$(function() {
let changedRowCount = 0;
const $checkboxes = $('table input[type="checkbox"]');
// 初始化时统计已选中的行
const initialCheckedCount = $checkboxes.filter(':checked').length;
$checkboxes.change(function() {
// 获取当前总选中数
const currentCheckedCount = $checkboxes.filter(':checked').length;
// 计算变化量
changedRowCount = Math.abs(currentCheckedCount - initialCheckedCount);
$('#rowCountDisplay').text('已切换行数: ' + changedRowCount);
});
});
原因:可能重复绑定事件或未考虑初始状态
解决:确保事件只绑定一次,并正确初始化计数器
原因:为每个checkbox单独绑定事件
解决:使用事件委托
$(document).on('change', 'table input[type="checkbox"]', function() {
// 处理逻辑
});
原因:事件绑定在元素创建前
解决:使用事件委托(如上)或在动态添加行后重新绑定
$(function() {
const $table = $('#dataTable');
let changedRows = new Set();
// 使用事件委托处理动态内容
$table.on('change', 'input[type="checkbox"]', function() {
const rowId = $(this).closest('tr').data('id');
if(this.checked) {
changedRows.add(rowId);
} else {
changedRows.delete(rowId);
}
updateCounter();
});
function updateCounter() {
$('#counter').text(`已切换 ${changedRows.size} 行`);
}
// 全选/取消全选
$('#selectAll').change(function() {
const isChecked = this.checked;
$table.find('input[type="checkbox"]').prop('checked', isChecked).trigger('change');
});
});
这个实现使用了Set对象来跟踪被切换的行ID,可以更精确地统计唯一行变化,即使同一行被多次切换也只会被计算一次。
没有搜到相关的文章