Jquery ui 如何将标准文本框命令添加到jqgrid上下文菜单

Jquery ui 如何将标准文本框命令添加到jqgrid上下文菜单,jquery-ui,jqgrid,contextmenu,Jquery Ui,Jqgrid,Contextmenu,如果使用将上下文菜单添加到jqGrid并使用文本字段内联编辑,则textbox标准上下文菜单不可用,将替换为jqGrid上下文菜单 如何将标准文本框上下文菜单命令(撤消、剪切、复制、粘贴、删除、全选)添加到jqGrid conext菜单或如何显示文本框内联编辑的标准上下文菜单 更新 在内联编辑中,如果通过右键单击黄色背景或“自动完成”框打开标准菜单,并且在打开标准浏览器上下文菜单后,自定义菜单未关闭,则会出现两个菜单 如何解决此问题?在上下文菜单中执行“复制”、“粘贴”等命令并不容易。。。因此

如果使用将上下文菜单添加到jqGrid并使用文本字段内联编辑,则textbox标准上下文菜单不可用,将替换为jqGrid上下文菜单

如何将标准文本框上下文菜单命令(撤消、剪切、复制、粘贴、删除、全选)添加到jqGrid conext菜单或如何显示文本框内联编辑的标准上下文菜单

更新

在内联编辑中,如果通过右键单击黄色背景或“自动完成”框打开标准菜单,并且在打开标准浏览器上下文菜单后,自定义菜单未关闭,则会出现两个菜单


如何解决此问题?

在上下文菜单中执行“复制”、“粘贴”等命令并不容易。。。因此,我决定修改我的演示从您的前一个问题。仅当页面不包含选定文本时,关联菜单中才会显示

第一个问题是
jquery.contextmenu.js
的原始代码包含以下代码片段:

$(this).bind('contextmenu', function(e) {
  // Check if onContextMenu() defined
  var bShowContext = (!!hash[index].onContextMenu) ? hash[index].onContextMenu(e) : true;
  if (bShowContext) display(index, this, e, options);
  return false;
});
因此
contextmenu
处理程序总是返回
false
,并阻止创建标准上下文菜单。我将代码修复为以下内容(您可以下载完整的修改代码):

我修改了所描述的
createContexMenuFromNavigatorButtons
函数的代码

onContextMenu: function (e) {
    var rowId = $(e.target).closest("tr.jqgrow").attr("id"), p = grid[0].p, i,
        lastSelId;

    if (rowId && getSelectedText() === '') {
        ...
        return true;
    } else {
        return false; // no contex menu
    }
}
使用
getSelectedText()
并仅在未选择文本时创建关联菜单。因此,仅当未选择任何文本时,您才会看到自定义上下文菜单;如果存在文本选择,则会看到标准上下文菜单(取决于web浏览器):

更新:我根据答案修改了关于
jquery.contextmenu.js
的错误报告。我希望
plugins
子目录中包含的
jquery.contextmenu.js
的主代码很快就会有变化

更新2:如何查看jqGrid 4.3中包含的jqGrid主代码中已包含的所有修复程序

更新3:如果您想为所有
元素启用标准上下文菜单,您只需修改
onContextMenu
回调中的代码即可。比如说

onContextMenu: function (e) {
    var p = grid[0].p, i, lastSelId,
        $target = $(e.target),
        rowId = $target.closest("tr.jqgrow").attr("id"),
        isInput = $target.is(':text:enabled') ||
        $target.is('input[type=textarea]:enabled') ||
        $target.is('textarea:enabled');
    if (rowId && !isInput && getSelectedText() === '') {
        ...

双击将激活内联编辑的另一个窗口。

非常感谢。如果未选择文本,则“粘贴”和“选择所有”命令仍应可用。如何将标准文本框上下文菜单添加到您创建的自定义菜单中?在这种情况下,两个命令都可用。@安德鲁斯:我认为这是不可能的。也许可以使用来自或其他人的解决方案?@安德鲁斯:我以前看到过答案,但在纯JavaScript解决方案中,使用Flash不是我的选项。此外,标准的上下文菜单在不同的浏览器中是完全不同的。谢谢。复制命令可以使用javascript提示符来实现,如下所述。如何实现全选、粘贴、删除命令?看起来一切都可以用javascript实现。
onContextMenu: function (e) {
    var p = grid[0].p, i, lastSelId,
        $target = $(e.target),
        rowId = $target.closest("tr.jqgrow").attr("id"),
        isInput = $target.is(':text:enabled') ||
        $target.is('input[type=textarea]:enabled') ||
        $target.is('textarea:enabled');
    if (rowId && !isInput && getSelectedText() === '') {
        ...