【问题标题】:How to detect if all jqGrids on a page have loaded?如何检测页面上的所有 jqGrids 是否已加载?
【发布时间】:2014-02-13 11:14:49
【问题描述】:

我正在使用 jqGrid 的 ASP.NET WebForms 版本,但是我确信应该可以使用与标准网格相同的事件。

我有一些页面上有多个网格,可能只有一个,也可能是多个。我有一个打印按钮,它将显示 10,000 条记录(显示网格上的所有记录),调整它的大小以适合 A4 纸,触发window.print(),然后返回到原始记录数,并将网格重新调整为100%。

缺少的部分是知道何时触发window.print(),因为我需要等待所有网格都加载完毕后再这样做。

我尝试使用全局var allGridsLoaded = false;,然后使用Load_Complete 事件和beforePageChange 设置var,但显然每个网格都重置了var,我不确定如何跟踪它们?

Load_Complete 中,我想我可以遍历每个网格,但是判断它们是否已加载的最简洁的方法是什么?

【问题讨论】:

    标签: javascript jquery jqgrid jqgrid-asp.net


    【解决方案1】:

    我不确定我是否完全理解您的要求。不过在我看来你需要

    • 获取页面上的网格总数
    • 为所有网格注册“全局”Load_Complete
    • 在开始准备打印之前将计数器设置为网格总数,开始重新加载网格,如果计数器的值为 0,则减少“全局”Load_Complete 句柄和 window.print() 内的计数器。李>

    因此,您真正需要的是上述列表中的两件事。每个网格都将基于一个空的 <table> 元素构建。 jqGrid 将"ui-jqgrid-btable" 类添加到所有表中。所以你可以使用

    $(".ui-jqgrid-btable")
    

    获取页面上所有网格的 jQuery 包装器。 $(".ui-jqgrid-btable").length 是网格数。要为所有网格注册通用“全局”Load_Complete,您可以使用jqGridLoadComplete(或jqGridAfterLoadComplete)事件(参见the documentation):

    $(".ui-jqgrid-btable").bind("jqGridLoadComplete", function (e, data) {
        // ...
    });
    

    更多信息请参见the answer

    我希望您能够以这种方式实现您的所有要求。

    【讨论】:

    • 作为建议,如果您从绑定到“jqGridLoadComplete”的匿名函数内部调用全局函数Load_Complete,我建议计数器在匿名函数和全局函数内部递减当计数器为 0 时只调用一次。换句话说,你可以有一个函数All_Load_Complete。如果函数调用的数量较少,则会对速度产生积极影响(例如,在slideshare.net/madrobby/extreme-javascript-performance 幻灯片 13-18 中看到)。
    • @Tom:对不起,我不能关注你。你的意思是什么“All_Load_Complete函数”?我的建议是减少"jqGridLoadComplete" 事件处理程序内部的计数器。那么你的建议是什么?
    • 那一定是我的错。我以为您是在建议减少全局函数中的计数器,阅读您答案中的第三个要点。
    • 我喜欢倒计时的想法...我一直在尝试检查加载 div 是否可见等...再次感谢您,我会告诉您我的进展情况
    • @Tom:这可能是误解,因为我使用了 "global" 这个词。我使用了引用这个词,因为只需要 one 回调或事件处理程序,它们将从页面上的每个网格中调用。无论如何,现在问题解决了是件好事。
    猜你喜欢
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    • 2018-01-09
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多