【问题标题】:How to programatically add an event handler on a JQGrid?如何以编程方式在 JQGrid 上添加事件处理程序?
【发布时间】:2009-12-14 15:17:31
【问题描述】:

我有一个已经初始化的 JQGrid。如何向它添加事件处理程序?我试过了

grid.setGridParam({
    onSelectRow: function(rowid, status) {
        alert("onSelectRow");
    }
});

但这并没有做任何事情(没有错误,但选择时也没有警报)。


更新

事实证明,上面的代码实际上工作得很好——尽管@jitter 指出新的 API 语法是首选。我的问题是grid 指的是错误的对象。由于某些原因,在 gridComplete 事件处理程序中,$(this) 不会返回对网格的引用,但 $("#" + this.id) 会。

// handles the gridComplete event
gridInitialized = function() {
    var grid = $("#" + this.id); 
    grid.jqGrid("setGridParam", { onSelectRow: selectRow });
};

【问题讨论】:

  • 对我的回答有任何反馈吗?它不是做你想做的吗?
  • 有什么想法为什么$(this) 和$("#" + this.id) 不同?有没有更好的“标准”方式在gridComplete 事件中获取对网格的引用?

标签: jquery jqgrid


【解决方案1】:

这样做的正确方法(+ 使用新的 API 语法)是这样的。不需要.trigger("reloadGrid")

grid.jqGrid("setGridParam", {
    onSelectRow: function(rowid, status) {
        alert("onSelectRow");
    }
});

【讨论】:

  • 感谢您指出改进的语法 - 实际上我上面的代码很好,但我使用的 grid 变量指的是错误的东西。
【解决方案2】:

只需添加一个触发器来重新加载网格,如下所示:

grid.setGridParam({
    onSelectRow: function(rowid, status) {
        alert("onSelectRow");
    }
}).trigger("reloadGrid");

根据文档,它应该重新加载网格,但如果我创建网格,它就不会发生,稍后添加此功能。

如果我将此代码放在链接的 onclick 处理程序中,它会触发重新加载网格。

【讨论】:

  • 谢谢 - 看起来 trigger("reloadGrid") 实际上没有必要 - 请参阅上面的更新。此外,如果你把它放在gridComplete 处理程序中——我正在这样做——它会让你进入一个无限循环。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-07
  • 2011-06-07
  • 1970-01-01
  • 1970-01-01
  • 2017-02-22
  • 2015-03-07
相关资源
最近更新 更多