【问题标题】:Footable triggers not working when trying to resize table after ajax call在 ajax 调用后尝试调整表格大小时,Footable 触发器不起作用
【发布时间】:2015-11-03 11:01:08
【问题描述】:

我在我正在创建的整个网站中使用可定位的表格,到目前为止,它主要是一帆风顺的,但是在将服务器端分页添加到表格时我遇到了问题。基本上我是通过 ajax 调用获取数据,当页面第一次加载时,一切都很好,footable 被正确初始化并且列在移动视图中折叠,但是当我按下下一页按钮时,新数据被添加到表中但是在移动视图中列不会折叠。见下图:

为了清楚起见,此网页上有多个可脚注的表格,上面的表格是使用 jquery.responsiveTabs 插件在选项卡控件内实现的。如果我最大化然后最小化浏览器,则可脚断点被添加到新行并且列折叠。

向表中添加新行时,我使用的是高级演示函数here中提供的ajax演示

我的ajax请求实现如下:

$.ajax({
    url: '/myurl/getdata/',
    success : function(data) {
        $('#despatchTbl tbody').append(data).trigger('footable_redraw');
    }
});

这与footable 文档中的代码相同,只是通过ID 而不是元素来引用表格。我还尝试了其他footable 触发器,例如footable_resize、footable_initialize 和一个我添加的新触发器,用于在交换选项卡footable_force_resize 时解决类似问题,但运气不佳,控制台也没有错误。

我的脚本按以下顺序声明:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" type="text/javascript"></script>
<script src="/scripts/footable.js" type="text/javascript"></script>
<script src="/scripts/jquery.responsiveTabs.js" type="text/javascript"></script>
<script type="text/javascript" src="/scripts/ajaxlibs.js"></script>

在脚本声明的下方,我正在初始化footable,如下所示:

<script language="javascript">
    $(function() {
       $('.footable').footable()
    }); 
</script>

我还尝试了以下内容,成功添加到选项卡激活事件中,每次更改选项卡时都会触发。

var table = $('.footable').footable();
table.trigger('footable_resize');

但是,当我在页面初始化后的 ajax 调用之后运行它时,我在控制台中收到以下错误。

typeerror $(...).footable 不是函数

我现在对此束手无策,我真的不想在这个后期阶段放弃脚踏实地并寻找替代方案。我已经在这里和谷歌上搜索了各种问题,但没有人能解决我的问题,所以任何帮助都将不胜感激!!!

【问题讨论】:

    标签: javascript jquery footable


    【解决方案1】:

    如果没有看到表格本身的标记,很难完全确定问题所在,但我会解决我看到的问题。

    我从未使用过 responsiveTabs,但我快速浏览了文档。更改选项卡时,您需要使用 responsiveTabs 插件的激活回调来调整 footable 的大小,如下所示:

    $("#tabs").responsiveTabs({
        rotate: false,
        startCollapsed: 'accordion',
        collapsible: 'accordion',
        activate: function(e, tab) {
          $('.footable').trigger('footable_resize');
        }
    });
    

    这是将数据添加到现有脚注的正确方法,我以您的 ajax 成功处理程序为例:

    $.ajax({
        url: '/myurl/getdata/',
        success : function(data) {
            // this gets the data within the footable
            $footable = $('#despatchTbl').data('footable');
    
            // use footables appendRow to ensure correct pagination
           $footable.appendRow(data);
        }
    });
    

    您只需要在页面加载时调用 $('.footable').footable() 来初始化一个表。

    【讨论】:

    • 感谢大卫!经过一些跟踪和错误后,我设法弄明白了,我只是没有时间更新我的问题。不过,您的解决方案看起来确实比我的更干净,所以我会修改我的代码。
    • 谢谢加里,我意识到这是一个老问题,但我想我应该发布一个解决方案,因为我来到这里遇到了同样的问题。很高兴这对您有所帮助!
    猜你喜欢
    • 2013-04-11
    • 2021-10-25
    • 2012-08-24
    • 1970-01-01
    • 1970-01-01
    • 2014-11-14
    • 2015-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多