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

Laravel 9页面刷新/CRUD操作后保持嵌套表格展开状态的方案

解决Laravel 9嵌套表格刷新/CRUD后保持展开状态的方案

不用重构现有CRUD逻辑,借助浏览器本地存储就能实现需求,具体步骤如下:

1. 修改按钮点击事件,记录展开状态

更新按钮的点击逻辑,在切换表格显示状态时,将展开的表格索引存入localStorage:

<button
  type="button"
  class="btn btn-warning"
  id="hidden{{ $buttonIndex }}"
  onclick="
    const tableIndex = '{{ $buttonIndex }}';
    const tableSelector = '.items' + tableIndex;
    const buttonSelector = '#hidden' + tableIndex;
    
    $(tableSelector).slideToggle(function() {
      const isVisible = $(this).is(':visible');
      // 更新按钮文字
      $(buttonSelector).html(isVisible ? 'Roll' : 'Rollout');
      
      // 读取当前已展开的表格索引列表
      let expandedTables = JSON.parse(localStorage.getItem('expandedTables')) || [];
      if (isVisible) {
        // 展开时添加索引,避免重复存储
        if (!expandedTables.includes(tableIndex)) {
          expandedTables.push(tableIndex);
        }
      } else {
        // 收起时移除对应索引
        expandedTables = expandedTables.filter(index => index !== tableIndex);
      }
      // 将更新后的列表存回localStorage
      localStorage.setItem('expandedTables', JSON.stringify(expandedTables));
    });"
>Rollout</button>

2. 页面加载时自动恢复展开状态

在页面底部(或布局文件的脚本区域)添加初始化脚本,页面加载完成后读取localStorage记录,自动展开对应表格并更新按钮文字:

<script>
$(document).ready(function() {
  const expandedTables = JSON.parse(localStorage.getItem('expandedTables')) || [];
  expandedTables.forEach(index => {
    const tableSelector = '.items' + index;
    const buttonSelector = '#hidden' + index;
    // 展开目标表格
    $(tableSelector).show();
    // 切换按钮显示文字
    $(buttonSelector).html('Roll');
  });
});
</script>

补充说明

  • 如果希望状态仅在当前浏览器会话有效,把localStorage换成sessionStorage即可,用法完全一致。
  • 确保循环中的$buttonIndex值唯一,避免不同表格的状态互相干扰。
  • 表单提交后的页面跳转、刷新操作都不会影响localStorage中的数据,能稳定恢复展开状态。

内容的提问来源于stack exchange,提问作者Quiet Molly

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 20:45:28