【问题标题】:Adding a Context Menu to jqGrid's onRightClickRow将上下文菜单添加到 jqGrid 的 onRightClickRow
【发布时间】:2011-11-10 20:29:33
【问题描述】:

我在 onRightClick 事件中向我的 jqGrid 添加上下文菜单时遇到了困难。右键单击单元格后,我想从 onRightClickRow 事件中获取 rowid、iRow 和 iCol 值。

但是,我遇到的问题是我第一次右键单击网格中的单元格时,没有出现上下文菜单。我第二次右键单击单元格时,会显示上下文菜单,但 rowid、iRow 和 iCol 值都是针对右键单击的第一个单元格的。所以 rowid、iRow 和 iCol 永远不会与右键单击的单元格匹配。

对于上下文菜单,我使用的是 jquery.contextmenu.r2.js

这是我拥有的 jqGrid 代码。

jQuery("#list").jqGrid({
    url:urlPath,
    datatype:"json",
    mtype:'GET',
    jsonReader: {
        root: function (obj) { return obj.result; },
        id: dataID,
        repeatitems: false,
        page:  function(obj) { return 1; },
        total: function(obj) { return 1; },
        records: function(obj) { return obj.result.length; }        
    },
    colNames: columnNames,
    colModel: columnModel,
    onRightClickRow: function (rowid, iRow, iCol, e) {
        jQuery("#list").contextMenu('rightClickMenu', {
            bindings: {
                'DisplayiRow': function(t) {
                    alert('DisplayiRow: ' + iRow);   
                },
                'DisplayiCol': function(t) {
                    alert('DisplayiCol: ' + iRow);
                }
            }
        })
    },
    scroll:1,
    headertitles: true,
    pager: '#pager',
    shrinkToFit: false,
    autowidth: true,
    height: gridHeight,
    sortable: true,
    sortorder: 'desc',
    viewsortcols:[true,'vertical', true],
    viewrecords: true,
    gridview: true,
    loadonce: true
  });
  jQuery("#list").jqGrid('filterToolbar', {searchOnEnter:false,defaultSearch:'cn'});
});

HTML 是

<div class="contextMenu" id="rightClickMenu" style="display:none">
    <ul>
       <li id="DisplayiRow">
           DisplayiRow</li>
       <li id="DisplayiCol">
           DisplayiCol</li>
   </ul>
</div>

有没有办法在 onRightClickRow 事件中添加右键单击上下文菜单,以便我可以获取被单击单元格的 rowid、iRow 和 iCol 值?

【问题讨论】:

    标签: jquery jqgrid


    【解决方案1】:

    查看包含the demothe old answer。我希望它有助于解决您的问题。我确信在loadComplete 中绑定contextMenu 并不是解决问题的唯一方法,但效果很好。

    此外,我建议您使用 jqGrid 源代码的 plugins 子目录中的上下文菜单插件。这是使用 jqGrid 测试的版本,我认为使用另一个没有意义。

    【讨论】:

    • 感谢您的帮助。我查看了您引用的帖子,它有点帮助,但我不确定它是否允许我获取 iRow 和 iCol 值以及 onRightClickRow 返回的 rowid。我不确定是否必须通过向下行添加上下文菜单到每个单元格,然后使用 find("td").eq(ColunmNumber) 添加菜单
    • @Abe:我之前给你写过我的建议并不是唯一的实现。我不明白你为什么需要 iRowiCol 值。 iRow 的值可以作为与所选行相对应的 DOM 元素的 rowIndex 属性获得:$("#" + trigger.id)[0].rowIndex。您是否需要为行中的不同单元格设置不同的上下文菜单?
    • @Abe:此外,在onContextMenu 处理程序内部,您可以检查event.target。它是 &lt;td&gt; 元素的 DOM。你可以得到iCol$.jgrid.getCellIndex(event.target)
    • 嗨奥列格,对不起,我不是更清楚,但是是的,我正在尝试为行中的不同单元格获取不同的上下文菜单。根据行/列位置,我将更改上下文菜单中显示的选项。我会尝试你在 onContextMenu 中检查 event.target 处理程序的建议。
    • @JessStone:我自己不使用 JqSuite,但它应该使用相同的开源 JavaScript 产品 jqGrid。所以上下文菜单的创建应该以相同的方式工作。我自己使用接近the answer 中描述的方法的动态上下文菜单。我首先将按钮添加到导航栏,然后根据导航栏的按钮创建上下文菜单。所以用户不需要滚动到顶部或底部来编辑、删除等。
    猜你喜欢
    • 1970-01-01
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 2015-01-09
    • 1970-01-01
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多