是否可以将多个事件处理程序绑定到JqGrid事件而不覆盖以前的事件?

Iro*_*fin 6 javascript jquery events jqgrid

例如,我在每个页面加载时调用我的默认设置,并将一个函数绑定到loadComplete,以便为我的网格执行一些基本格式化.

在某些页面上,我有其他想要同时执行的逻辑,但是如果我在网格定义中设置了loadComplete,它将覆盖我默认设置中的函数.

有没有办法绑定多个处理程序,或一些其他方式执行所有必要的代码?提前致谢.

Ole*_*leg 8

我想你问一下当前版本的jqGrid中存在的一个重要问题.现在很难在jqGrid中实现更多的事件处理程序.对于使用jqGrid的小项目,这个问题并不重要,但是如果你想构造一些解释jqGrid的类,这个问题很重要.您当前的解决方法是可以的,但有您自己理解的限制.主要问题是,您只能再实现一个额外的loadCompleteEx处理程序.

我建议你使用jQuery.trigger或更好的jQuery.triggerHandler.您可以将它与jQuery.bindjQuery.unbind一起使用.在这种方式中,您可以定义任意数量的事件处理程序,其工作方式与标准jQuery事件类似.

例如,

var grid = $("#list");

grid.bind('jqGridLoadComplete',function(e,data) {
    alert ("in first jqGridLoadComplete event handler. Called for the page " +
           data.page);
});
grid.jqGrid({
    // jqGrid parameters
    // ...
    loadComplete: function(data) {
        alert("main load complete");
        $(this).triggerHandler("jqGridLoadComplete", data);
    }
});
grid.bind('jqGridLoadComplete.jqGrid',function(e,data) {
    alert ("in second jqGridLoadComplete event handler. Called for the page " +
           data.page);
});
Run Code Online (Sandbox Code Playgroud)

在第二个jQuery.bind我使用命名空间'jqGrid'中的命名空间事件'jqGridLoadComplete.jqGrid'.因此,您可以使用您知道的(以及您需要的)关于jQuery中标准事件的所有内容.

请在此处查看相应的演示.尝试切换网格中的页面或更改要调用的排序loadComplete.

我在jqGrid定义jqGridLoadComplete 之后绑定了第二个.因为我的demo使用datatype:'local'了第一次调用loadComplete绑定执行之前.所以在第一次loadComplete执行时将是jqGridLoadComplete未调用的第二个事件处理程序.因此,您最好在jqGrid定义之前绑定事件处理程序.在这种情况下,您可以确保始终调用该事件.

更新: 重要!!! .一个不需要触发jqGridLoadComplete明确的事件里面loadComplete,如果你使用的jqGrid的当前版本.jqGrid 已经为你做了这个.上面的代码是相应的功能包含在jqGrid的主代码之前编写的.答案刚刚描述了如何在jqGrid中实现多个事件处理程序的主要思想.在写完答案后,我发布了一些拉取请求到trirand,我的建议是在jqGrid中实现jQuery事件.从版本4.3.2开始(参见此处)jqGrid支持事件.