homebest 2024-05-13 14:55 采纳率: 75%
浏览 21
已结题

layui数据表格多次重载的数据覆盖问题

我在用layui数据表格时用到了表单查询后重载表格以及toolbar头部工具栏弹窗查询重载表格,但遇到的问题是:如果先表单查询,再toolbar查询都没问题,但是如果先toolbar查询再表单查询就会出现结果总是toolbar查询的结果,控制台的网络里能看到原因是此时表单查询获取到结果的同时也触发了toolbar查询导致结果被覆盖了,但我找到代码里哪里有关联的地方,请指点一下。
代码是php和javascript结合的

<table class="layui-hide" id="myTable" lay-filter="myTable" ></table>

<script type="text/html" id="toolbarDemo">
  <div class="layui-btn-container">  
  <a class="layui-btn layui-btn-radius layui-btn layui-bg-purple" lay-on="test-offset-l" lay-event="yxfilter">过滤</a>
  <a class="layui-btn layui-btn-radius layui-btn layui-bg-blue" lay-on="test-offset-l" lay-event="paiwei">排位</a>
  <a class="layui-btn layui-btn-radius layui-btn" lay-on="test-offset-l" lay-event="clearFilter">数据刷新</a>
  </div>
</script>

<script>
    // 自定义模块
    layui.config({
        base: 'lst/ext/',   // 模块目录
        version: 'v1.6.2'
    }).extend({                         // 模块别名
        soulTable: 'soulTable'
    });

    layui.use(['form', 'table','soulTable','slider'], function () {
        var table = layui.table,
            soulTable = layui.soulTable,
            $ = layui.$,
                   slider = layui.slider,
            form = layui.form;            

        var myTable = table.render({
            elem: '#myTable'
            ,height: $(document).height() - $('#myTable').offset().top - 220
            ,even: true
            ,totalRow: true
            ,limit: 15
            ,limits:[15,20,25,30]
            ,overflow: 'tips'
            ,page: true
            ,id:myTable
            ,toolbar: '#toolbarDemo' 
            ,defaultToolbar: ['filter','print'] //这里定义右边显示 
            ,cols: [[

                {type:'numbers', title: '序号', hide:true},
                {field: 'year', merge: true,title: 'Year', width: 80, sort: true, filter: true, hide:true, totalRowText: '合集'},              
                {field: 'gx_name',title: 'GXMC', width: 270, sort: true, filter: true},
                {field: 'zyz_name', title: 'ZYZ', width: 200, sort: true, filter: true},
                {field: 'zf', title: 'TDF',  width: 110, sort: true, filter: true},
                {field: 'tdxlx', title: 'TDLX', width: 110, sort: true,  filter: true},              
                {field: 'bkkzx_db', title: '󠀾󠀾󠀾BKX', width: 110, sort: true, filter: true},
                {field: 'tskzx_db', title: 'TZX', width: 110, sort: true,  filter: true},
                {field: 'bdrs', title: 'BDRS',  width: 110, sort: true, filter: true},
                {field: 'ljrs', title: 'LJRS',  width: 110, sort: true,  filter: true},                
                {field: 'gx_note', merge: true,title: 'LQSM',  width: 155, sort: true,  filter: true},                                

            ]]
            
            ,excel:{ // 导出excel配置, (以下值均为默认值)
            on: false,} //是否启用, 默认开启
          
            ,done: function () {
                soulTable.render(this)
            }
        });

        search({});
        function search(data) {   
                       
            $.ajax({
                url: 'tdx_data.php',
                data: data,
                dataType: 'json',
                success: function (res) {                    
                    table.reload('myTable', {
                        data: res.data
                    })
                }                
            })     
            
        }

        var isQueryTriggered = false; // 新增标志变量

            table.on('toolbar(myTable)', function(obj) {
            switch (obj.event) {    
               
                case 'clearFilter':                  
                
                        layer.msg('数据重新载入!', {icon:1,time:1000},function(){
                        setTimeout('window.location.reload()',1000);
                        });                  
          
                      break;

                case 'yxfilter':

                  layer.open({
                  type: 2,                  
                  anim: 'slideRight', 
                  area: ['590px', '95%'],
                  shade: 0.1,
                  shadeClose: true,                        
                  title: '条件过滤:',
                  content: 'gx_filter.php',
                });
                break; 

      }
    })  

              $("#multi_searchBtn").on('click',function(){
                isQueryTriggered = true; // 设置查询标志
                var price_min = $("#price_min").val();
                var price_max = $("#price_max").val();
                var gxmc = $("#gxmc").val();
                var zyz = $("#zyz").val();
                var tdlx = $("#tdlx").val();

                console.log(price_min);
                console.log(price_max);
                console.log(gxmc);
                console.log(zyz);
                console.log(tdlx);
                
               // 重载数据前检查查询标志
    if (isQueryTriggered) {
        $.ajax({
            type: 'POST',
            url: 'multi_query.php',
            data: {
                price_min: price_min,
                price_max: price_max,
                gxmc: gxmc,
                zyz: zyz,
                tdlx: tdlx
            },
            success: function(res) {
                table.reload('myTable', {
                    data: res.data
                });
            }
        });
    } else {
        // 如果需要,可以在这里处理非查询触发的情况
    }
                    
                          return false;  //防止查询结果被默认数据二次覆盖!
                    
                      });  


        

  })

</script>

先toolbar查询后表单查询的控制台截图

img

我将表单查询的表格重载改为仅数据重载后,控制台网络里只触发toolbar查询filter_schooldata.php一次,比之前减少一次,但还是数据被覆盖着:

 success: function (res) {                                
                              table.reloadData('myTable', {
                                    data: res.data
                                })
                            }

img

我重新调整了一下代码,将toolbar触发事件弹窗查询改到了和表单查询按钮一起,去除了toolbar,但还是同样情况,只要先弹窗查询 再表单查询 就会出现弹窗查询的结果把表单查询结果覆盖,而且是上一次弹窗查询的结果,不是重新触发的新弹窗查询数据,而且如果先表单查询,再弹窗查询结果是没部题,但弹窗触发按钮总是第一次点击是重载表格,第二才正常弹窗显示,不知道什么这样?


    <button type="submit" class="layui-btn layui-btn-danger" lay-submit lay-filter="multi_query" id="multi_searchBtn">查询</button>
  </div>      
  
  </form>
  <button type="submit" class="layui-btn" lay-submit lay-filter="gx_filter" id="gx_filter">过滤</button>
  </div>           

  </div>  

  </div>
<table class="layui-hide" id="myTable" lay-filter="myTable" ></table>

<script>
    // 自定义模块
    layui.config({
        base: 'lst/ext/',   // 模块目录
        version: 'v1.6.2'
    }).extend({                         // 模块别名
        soulTable: 'soulTable'
    });

    layui.use(['form', 'table','soulTable','slider'], function () {
        var table = layui.table,
            soulTable = layui.soulTable,
            $ = layui.$,
                   slider = layui.slider,
            form = layui.form;          


        var myTable = table.render({
            elem: '#myTable'
            ,height: $(document).height() - $('#myTable').offset().top - 220
            ,even: true
            ,totalRow: true
            ,limit: 15
            ,limits:[15,20,25,30]
            ,overflow: 'tips'
            ,page: true
            ,id:myTable
            ,toolbar: '#toolbarDemo' 
            ,defaultToolbar: ['filter','print'] //这里定义右边显示 
            ,cols: [[

                {type:'numbers', title: '序号', hide:true},
                {field: 'year', merge: true,title: 'Year', width: 80, sort: true, filter: true, hide:true, totalRowText: '合集'},              
                {field: 'gx_name',title: 'GXMC', width: 270, sort: true, filter: true},
                {field: 'zyz_name', title: 'ZYZ', width: 200, sort: true, filter: true},
                {field: 'zf', title: 'TDF',  width: 110, sort: true, filter: true},
                {field: 'tdxlx', title: 'TDLX', width: 110, sort: true,  filter: true},              
                {field: 'bkkzx_db', title: '󠀾󠀾󠀾BKX', width: 110, sort: true, filter: true},
                {field: 'tskzx_db', title: 'TZX', width: 110, sort: true,  filter: true},
                {field: 'bdrs', title: 'BDRS',  width: 110, sort: true, filter: true},
                {field: 'ljrs', title: 'LJRS',  width: 110, sort: true,  filter: true},                
                {field: 'gx_note', merge: true,title: 'LQSM',  width: 155, sort: true,  filter: true},                                

            ]]
            
            ,excel:{ // 导出excel配置, (以下值均为默认值)
            on: false,} //是否启用, 默认开启
          
            ,done: function () {
                soulTable.render(this)              

            }
        });


           
      
        form.on('submit(multi_query)', function(multi_data){
              
              var field = multi_data.field; // 获取表单字段值
              soulTable.clearFilter('myTable') // 清除条件数据        
              
                console.log(field);
                     
                $.ajax({
                            type:'POST',
                            url: 'multi_query.php',                          
                            data: multi_data.field,
                            success: function (res) {                                
                              table.reloadData('myTable', {
                                    data: res.data
                                });      

                                return false;  //防止查询结果被默认数据二次覆盖!
                            }
                        }, 100)
            
                  return false;  //防止查询结果被默认数据二次覆盖!
            
              });  

        search({});

        function search(data) {                      

            $.ajax({
                url: 'tdx_data.php',
                data: data,
                dataType: 'json',
                success: function (res) {                    
                    table.reload('myTable', {
                        data: res.data
                    });

                }                
            });
            
        }


              $("#gx_filter").on('click', function() {              
              layer.open({
                              type: 2,
                              
                              anim: 'slideRight', 
                              area: ['590px', '95%'],
                              shade: 0.1,
                              shadeClose: true,                        
                              title: '条件过滤:',
                              content: 'gx_filter.php',            
                            });                      
                        
                       
                          });  
            
     

  })

</script>
  • 写回答

15条回答 默认 最新

  • 专家-皆知 2024-05-13 14:55
    关注

    在每次查询后清空之前加载的数据或使用不同的数据标识区分。

    以上回复有部分引自免费微信小程序:皆我百晓生。 如问题尚未解决,还请稍待,如有疑问请回复进一步沟通。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月14日
  • 修改了问题 5月14日
  • 修改了问题 5月14日
  • 修改了问题 5月13日
  • 展开全部

悬赏问题

  • ¥15 关于stm32hal库驱动ft6336触摸屏遇到的问题
  • ¥15 需要手写数字信号处理Dsp三个简单题 不用太复杂
  • ¥15 数字信号处理考试111
  • ¥100 关于#audobe audition#的问题,如何解决?
  • ¥15 allegro17.2生成bom表是空白的
  • ¥15 请问一下怎么打通CAN通讯
  • ¥20 如何在 rocky9.4 部署 CDH6.3.2?
  • ¥35 navicat将excel中的数据导入mysql出错
  • ¥15 rt-thread线程切换的问题
  • ¥15 高通uboot 打印ubi init err 22