jquery - jqGrid treeGrid 捕获展开折叠事件

标签 jquery cookies jqgrid

我使用 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% 有效。

树网格有方法 expandNodecollapseNode已记录在案。如果单击节点图标,该方法也会由 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 ,它有两个属性:rowiditemitem是节点,它将展开/折叠。

关于jquery - jqGrid treeGrid 捕获展开折叠事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9178682/

相关文章:

Javascript 获取当前的 Controller 和 Action on Rails

javascript - 当网站访问者手动更改 URL 时,如何根据 URL 设置 Cookie

asp.net - FormsAuthentication.SetAuthCookie 未设置路径或域?

javascript - JQGrid 不改变页面

javascript - jqgrid 在更改另一个单元格时更改可编辑单元格的值(相关列)

javascript - jQuery 改进表迭代器

jquery - 使用 html 类而不是 del 元素来覆盖文本

jquery - 在嵌套表中查找单元格位置(行、列)

javascript - W3 学校 cookie 的删除 cookie 按钮

jquery - 当用户使用自定义弹出表单更改数据时如何重新加载数据jqGrid