jqGrid treeGrid catch展开collaps事件

我使用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中没有事件或回调可以帮助您捕获树节点的折叠或扩展。

通常,您发布的代码会进行正确的测试。 然而,你自己并不完全满意解决方案。 我发现它也不太好。 我看到的最大问题是你测试哪个图标有按钮,但图标将由网格中相同事件的原始处理程序更改。 绑定的顺序应该非常重要。

在没有事件存在的情况下,我更喜欢使用子类化技术。 这很容易,但它100%有效。

Tree Grid有方法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); } }); 

您可以在演示中看到结果。

更新: 免费的jqGrid支持回调和事件,这使得上面覆盖expandNodecollapseNode不需要。 它支持在扩展或折叠节点或行之前或之后调用的额外回调。 :回调的名称treeGridBeforeExpandNodetreeGridAfterExpandNodetreeGridBeforeCollapseNodetreeGridAfterCollapseNodetreeGridBeforeExpandRowtreeGridAfterExpandRowtreeGridBeforeCollapseRowtreeGridAfterCollapseRow和相应的jQuery的事件jqGridTreeGridBeforeExpandNodejqGridTreeGridAfterExpandNodejqGridTreeGridBeforeCollapseNodejqGridTreeGridAfterCollapseNodejqGridTreeGridBeforeExpandRowjqGridTreeGridAfterExpandRowjqGridTreeGridBeforeCollapseRowjqGridTreeGridAfterCollapseRow 。 所有回调都有一个参数: options ,它有两个属性: rowiditem 。 该item是节点,将进行扩展/折叠。