You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bootstrap Toggle在DataTables分页页失效,如何实现全表行切换?

解决Bootstrap Toggle全选所有分页项的问题

这个问题我之前帮别人处理过好多次,核心原因其实是你用的表格(应该是DataTables吧?)分页时,非当前页的行根本不在DOM里,所以直接操作.js-bs-toggle只能影响当前可见的那些按钮。要实现全选/全不选所有分页的条目,得从数据层入手,而不是只搞DOM操作~

步骤1:给单个Toggle按钮绑定数据同步事件

先修改draw事件里的代码,给每个切换按钮绑定change事件,把状态同步到对应行的表格数据中,这样切换单个按钮时,状态能被持久化保存:

table.on('draw', function() {
  $('.js-bs-toggle').bootstrapToggle({ on: 'Yes', off: 'No' })
    .off('change') // 避免重复绑定事件
    .on('change', function() {
      // 获取当前按钮所在的表格行
      const row = table.row($(this).closest('tr'));
      // 把toggle的状态存到行数据里,这里用`isChecked`字段做示例
      row.data().isChecked = $(this).prop('checked');
      row.invalidate(); // 更新表格的缓存数据
    });
});

步骤2:改造全选按钮的点击事件

现在全选按钮点击时,要遍历表格的所有行数据(不管是否在当前页),统一设置状态,再刷新表格让DOM同步:

$('.js-toggle-all').on('click', function() {
  // 获取全选按钮点击后要切换到的目标状态
  const targetState = !$(this).prop('checked');
  
  // 遍历所有行数据,统一设置状态
  table.rows().every(function() {
    this.data().isChecked = targetState;
    this.invalidate();
  });
  
  // 刷新表格,保持当前分页位置不变,同步所有页的Toggle状态
  table.draw(false);
  
  // 同步全选按钮自身的状态
  $(this).bootstrapToggle(targetState ? 'on' : 'off');
});

步骤3:初始化时同步行数据到Toggle按钮

还要确保表格初始化(包括分页切换)时,Toggle按钮的状态和行数据一致,所以在draw事件里补充状态同步逻辑:

table.on('draw', function() {
  $('.js-bs-toggle').each(function() {
    const row = table.row($(this).closest('tr'));
    // 根据行数据设置Toggle的初始状态
    $(this).bootstrapToggle(row.data().isChecked ? 'on' : 'off');
  }).bootstrapToggle({ on: 'Yes', off: 'No' })
    .off('change')
    .on('change', function() {
      const row = table.row($(this).closest('tr'));
      row.data().isChecked = $(this).prop('checked');
      row.invalidate();
    });
});

额外优化:自动同步全选按钮状态

如果需要全选按钮的状态能自动匹配所有行的状态(比如所有行都选中时全选按钮自动变“on”),可以在draw事件最后加个检查逻辑:

table.on('draw', function() {
  // ... 上面的所有代码 ...
  
  // 检查所有行是否都被选中
  const allChecked = table.rows().every(function() {
    return this.data().isChecked === true;
  });
  $('.js-toggle-all').bootstrapToggle(allChecked ? 'on' : 'off');
});

这样改造后,全选按钮就能真正控制所有分页的条目状态了,不管切换到哪一页,Toggle按钮的状态都会和数据保持一致~

内容的提问来源于stack exchange,提问作者Andrew Taylor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:28:31