从jqgrid转换为自由jqgrid,现在没有上下文菜单

从jqgrid转换为自由jqgrid,现在没有上下文菜单,jqgrid,free-jqgrid,Jqgrid,Free Jqgrid,我正在从jqgrid(4.6.0)转换为免费的jqgrid(4.14.1)。一切似乎都正常,但当我在网格上右键单击(工具栏搜索按钮仍然有效)时,我没有得到上下文菜单。我需要额外的进口货吗?以下是我目前正在介绍的内容: jqueryui/1.12.1/themes/smoothness/jquery-ui.css free-jqgrid/4.14.1/css/ui.jqgrid.css free-jqgrid/4.14.1/plugins/css/ui.multiselect.css jquery

我正在从jqgrid(4.6.0)转换为免费的jqgrid(4.14.1)。一切似乎都正常,但当我在网格上右键单击(工具栏搜索按钮仍然有效)时,我没有得到上下文菜单。我需要额外的进口货吗?以下是我目前正在介绍的内容:

jqueryui/1.12.1/themes/smoothness/jquery-ui.css
free-jqgrid/4.14.1/css/ui.jqgrid.css
free-jqgrid/4.14.1/plugins/css/ui.multiselect.css
jquery/3.2.1/jquery.min.js
jqueryui/1.12.1/jquery-ui.min.js
free-jqgrid/4.14.1/plugins/min/ui.multiselect.js
free-jqgrid/4.14.1/i18n/grid.locale-en.js
free-jqgrid/4.14.1/jquery.jqgrid.min.js
free-jqgrid/4.14.1/plugins/jquery.contextmenu.js
短暂性脑缺血发作

编辑:

grid.contextMenu(menuId{
绑定:myBinding,
onContextMenu:函数(e){
var p=网格[0].p,
我
拉斯特利德,
$target=$(即target),
rowId=$target.nexist(“tr.jqgrow”).attr(“id”),
isInput=$target.is(':text:enabled')| |$target.is('input[type=textarea]:enabled')| |$target.is('textarea:enabled');
if(rowId&!isInput&&jqGridGetSelectedText()==“”){
i=$.inArray(rowId,p.selarrrow);
if(p.selrow!==rowId&&i<0){
//防止取消选择该行
//实现是针对我们使用的“multiselect:false”,
//但是可以很容易地修改“multiselect:true”的代码
grid.jqGrid('setSelection',rowId);
}否则如果(p.multiselect){
//“编辑”将编辑第一个选定的行。
//rowId已选择,但不能是最后一个选择。
//我们将rowId与数组p.selarrow的第一个元素交换
lastSelId=p.selarrrow[p.selarrrow.length-1];
如果(i!==p.selarrrow.length-1){
p、 selarrrow[p.selarrrow.length-1]=rowId;
p、 selarrrow[i]=lastSelId;
p、 selrow=rowId;
}
}
返回true;
}否则{
返回false;
//无上下文菜单
}
},
菜单样式:{
背景颜色:“#fcfdfd”,
边框:“1px实心#a6c9e2”,
maxWidth:'600px',
宽度:“100%”
},
项目悬停样式:{
边框:“1px实心#79b7e7”,
颜色:“#1d5987”,
背景颜色:“#d0e5f5”
}
});
编辑: 演示


jqGrid从REST服务加载数据-百万行
$(文档).ready(函数(){
$(“#jqGrid”).jqGrid({
网址:'http://trirand.com/blog/phpjqgrid/examples/jsonp/getjsonp.php?callback=?&qwery=longorders',
mtype:“获取”,
数据类型:“jsonp”,
colModel:[{
标签:“OrderID”,
名称:'OrderID',
关键:没错,
宽度:75
}, {
标签:“客户ID”,
名称:“CustomerID”,
宽度:150
}, {
标签:“订单日期”,
名称:'OrderDate',
宽度:150
}, {
标签:“运费”,
名称:'运费',
宽度:150
}, {
标签:“船名”,
名称:'船名',
宽度:150
}],
viewrecords:是的,
宽度:780,
身高:250,
rowNum:20,
寻呼机:“jqGridPager”
}).jqGrid('navGrid',“#jqGridPager”{
加:是的,
编辑:对,
观点:没错,
戴尔:是的,
搜索:对,
刷新:正确
}).jqGrid(“createContexMenuFromNavigatorButtons”,$(“#jqGrid”).jqGrid(“getGridParam”,“pager”))
});

在我看来,问题的原因不是从jqGrid(4.6.0)迁移到免费jqGrid(4.14.1),而是迁移到jQuery UI 1.12.1。jQueryUI菜单的CSS样式在版本1.10.x、1.11.x和1.12.x中多次更改。插件
jquery.contextmenu.js
jquery.contextmenu ui.js
都是旧的。它们基于10年前发布的代码(见文件注释中2007年7月16日的日期)。如果您真的不需要使用jQueryUI1.12.1,那么我建议您只使用jQueryUI1.11.4。它将上下文菜单的外观更改为以下内容:

如果确实需要使用jQuery UI 1.12.1,则应更改
jQuery.contextmenu UI.js使用的与以下代码相关的默认设置:

$.contextMenu.defaults({
menuShadowStyle:{
“盒影”:“8px 8px 8px#aaaaa”,
边距:“-2px”,
填充:“0”
},
ItemIConPanstyle:{
“浮动”:“无”,
顶部:“-2px”,
职位:“相对”
}
});
jquery.contextmenu ui.js
从更新到最新版本非常重要。如果必须使用CDN中的
jquery.contextmenu ui.js
4.14.1,则需要在上述调用
$.contextmenu.defaults
方法的基础上添加额外的CSS规则

.jqContextMenu.ui菜单.ui图标{
位置:相对位置;
}
.jqContextMenu li span{
浮动:无!重要;
}

参见

可以用不同的方式创建上下文菜单。您至少需要发布您使用的JavaScript代码。如果您不发布演示,那么很难帮助您,因为演示再现了问题。例如,有了JSFIDLE demo,不仅可以重现问题,还可以修复代码使其正常工作。我个人只使用
createContexMenuFromNavigatorButtons
plugins/jquery.createcontexmenufromnavigatorbutton中的