我使用 jqGrid 来构建一些大树。现在我想记住cookie中展开和折叠的节点
所以我想捕获展开和折叠事件。我在手册中找不到它
所以我是这样解决的
grid.find("div.treeclick").bind("click",function(e){
classes = $(this).attr('class');
//returns:
//ui-icon treeclick ui-icon-triangle-1-s tree-minus
//ui-icon treeclick ui-icon-triangle-1-e tree-plus
if(classes.indexOf('-minus') != -1)
alert ('Expand!');
else if(classes.indexOf('-plus') != -1)
alert ('Collaps!')
});
有人可以提出另一种方法吗?
最佳答案
目前 jqGrid 中没有事件或回调可以帮助您捕获树节点的折叠或展开。
一般来说,您发布的代码会进行正确的测试。然而,您自己对解决方案并不完全满意。我也觉得不太好。我看到的最大问题是您测试哪个图标具有按钮,但该图标将被网格中相同事件的原始处理程序更改。绑定(bind)的顺序应该非常重要。
在你的地方,我更喜欢在不存在事件的情况下使用子类化技术。这非常简单,但 100% 有效。
树网格有方法 expandNode和 collapseNode已记录在案。如果单击节点图标,该方法也会由 jqGrid 在内部调用。方法expandNode
来电 reloadGrid
显示展开的树。
所以我建议在创建树网格后添加以下代码:
var orgExpandNode = $.fn.jqGrid.expandNode,
orgCollapseNode = $.fn.jqGrid.collapseNode;
$.jgrid.extend({
expandNode: function (rc) {
alert('before expandNode: rowid="' + rc._id_ + '", name="' + rc.name + '"');
return orgExpandNode.call(this, rc);
},
collapseNode: function (rc) {
alert('before collapseNode: rowid="' + rc._id_ + '", name="' + rc.name + '"');
return orgCollapseNode.call(this, rc);
}
});
您可以在 the demo 上查看结果.
更新: Free jqGrid支持回调和事件,这使得上面的expandNode
被覆盖和collapseNode
不需要。它已经支持在展开或折叠节点或行之前或之后调用的附加回调。回调名称:treeGridBeforeExpandNode
, treeGridAfterExpandNode
, treeGridBeforeCollapseNode
, treeGridAfterCollapseNode
, treeGridBeforeExpandRow
, treeGridAfterExpandRow
, treeGridBeforeCollapseRow
, treeGridAfterCollapseRow
以及相应的 jQuery 事件 jqGridTreeGridBeforeExpandNode
, jqGridTreeGridAfterExpandNode
, jqGridTreeGridBeforeCollapseNode
, jqGridTreeGridAfterCollapseNode
, jqGridTreeGridBeforeExpandRow
, jqGridTreeGridAfterExpandRow
, jqGridTreeGridBeforeCollapseRow
, jqGridTreeGridAfterCollapseRow
。所有回调都有一个参数:options
,它有两个属性:rowid
和item
。 item
是节点,它将展开/折叠。
关于jquery - jqGrid treeGrid 捕获展开折叠事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9178682/