jquery - 如何创建 jqGrid 上下文菜单?

标签 jquery jqgrid

我正在尝试在 jqGrid 上创建一个上下文菜单(针对每一行),但找不到如何执行此操作。我目前正在使用 jQuery 上下文菜单(有更好的方法吗?),但它适用于整个网格不适用于特定行,即无法对其执行行级操作。请帮助我,谢谢。

$(document).ready(function(){ 
  $("#list1").jqGrid({
    sortable: true,
    datatype: "local", 
    height: 250, 
    colNames:['Inv No','Date', 'Client', 'Amount','Tax','Total','Notes'], 
    colModel:[ 
        {name:'id',index:'id', width:60, sorttype:"int"}, 
        {name:'invdate',index:'invdate', width:90, sorttype:"date"}, 
        {name:'name',index:'name', width:100}, 
        {name:'amount',index:'amount', width:80, align:"right",sorttype:"float"}, 
        {name:'tax',index:'tax', width:80, align:"right",sorttype:"float"}, 
        {name:'total',index:'total', width:80,align:"right",sorttype:"float"}, 
        {name:'note',index:'note', width:50, sortable:false} 
        ], 
    multiselect: true,
    rowNum:10, 
    rowList:[10,20,30], 
    pager: '#pager1', 
    sortname: 'id', 
    recordpos: 'left', 
    viewrecords: true, 
    sortorder: "desc",
    caption: "Manipulating Array Data"
  });
  $("#list1").jqGrid('navGrid','#pager1',{add:false,del:false,edit:false,position:'right'});

  $("#list1").contextMenu({
        menu: "myMenu"
    },
        function(action, el, pos) {
        alert(
            "Action: " + action + "\n\n" +
            "Element ID: " + $(el).attr("id") + "\n\n" +
            "X: " + pos.x + "  Y: " + pos.y + " (relative to element)\n\n" +
            "X: " + pos.docX + "  Y: " + pos.docY+ " (relative to document)"
            );
    });

最佳答案

有很多上下文菜单插件。您可以在 plugins 中找到其中之一。 jqGrid 源的子目录。

要使用它,您可以使用以下 HTML 标记来定义上下文菜单:

<div class="contextMenu" id="myMenu1" style="display:none">
    <ul style="width: 200px">
        <li id="add">
            <span class="ui-icon ui-icon-plus" style="float:left"></span>
            <span style="font-size:11px; font-family:Verdana">Add Row</span>
        </li>
        <li id="edit">
            <span class="ui-icon ui-icon-pencil" style="float:left"></span>
            <span style="font-size:11px; font-family:Verdana">Edit Row</span>
        </li>
        <li id="del">
            <span class="ui-icon ui-icon-trash" style="float:left"></span>
            <span style="font-size:11px; font-family:Verdana">Delete Row</span>
        </li>
    </ul>
</div>

您可以将上下文菜单绑定(bind)到 loadComplete 内的网格行(将行放入 <table> 后):

loadComplete: function() {
    $("tr.jqgrow", this).contextMenu('myMenu1', {
        bindings: {
            'edit': function(trigger) {
                // trigger is the DOM element ("tr.jqgrow") which are triggered
                grid.editGridRow(trigger.id, editSettings);
            },
            'add': function(/*trigger*/) {
                grid.editGridRow("new", addSettings);
            },
            'del': function(trigger) {
                if ($('#del').hasClass('ui-state-disabled') === false) {
                    // disabled item can do be choosed
                    grid.delGridRow(trigger.id, delSettings);
                }
            }
        },
        onContextMenu: function(event/*, menu*/) {
            var rowId = $(event.target).closest("tr.jqgrow").attr("id");
            //grid.setSelection(rowId);
            // disable menu for rows with even rowids
            $('#del').attr("disabled",Number(rowId)%2 === 0);
            if (Number(rowId)%2 === 0) {
                $('#del').attr("disabled","disabled").addClass('ui-state-disabled');
            } else {
                $('#del').removeAttr("disabled").removeClass('ui-state-disabled');
            }
            return true;
        }
    });
}

在示例中,我禁用了 "Del"具有偶数 rowid 的所有行的菜单项。禁用的菜单项会转发项目选择,因此需要控制该项目是否在bindings内再次禁用。 .

我在上面使用了$("tr.jqgrow", this).contextMenu('myMenu1', {...});将相同的菜单绑定(bind)到所有网格行。您当然可以将不同的行绑定(bind)到不同的菜单:$("tr.jqgrow:even", this).contextMenu('myMenu1', {...}); $("tr.jqgrow:odd", this).contextMenu('myMenu2', {...});

我没有读contextMenu的代码小心,上面的例子可能不是最好的,但是效果很好。可以看对应的demo here 。该演示还有许多其他功能,但您应该只在 loadComplete 中查看。事件处理程序。

关于jquery - 如何创建 jqGrid 上下文菜单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6607576/

相关文章:

jquery - 如何创建 jqGrid

jquery - 我的jquery正确吗?

javascript - 单击时移动图像

button - jqgrid EditActionIconsColumn 事件

c# - 如何将 jqGrid 与 C#/ASP.NET 和 JSON.NET(没有 AJAX.NET 的东西)一起使用?

javascript - 指定自定义搜索参数时,jqGrid 自定义 editfunc 不起作用

mysql - JQGrid 不显示某些列的值,而其他列的值显示正确

jquery - 让视差在 iPad 上运行

javascript - 使用 jquery 识别按钮的高度会给出错误的结果

javascript - 无法在 Highcharts 样条图上动态绘制更新的 y 值