我使用免费的jqgrid 4.12并在模态对话框中使用jqgrid。当我选择一行并单击编辑按钮时,会出现编辑对话框,但我无法填写该字段(似乎已冻结)。
你能帮助我吗?
http://jsfiddle.net/9ezy09ep/54/
function OuvrirEcran()
{
$("#Ecran").dialog("open");
};
$(function ()
{
$("#Ecran").dialog(
{
dialogClass: 'Ecran',
autoOpen: false,
width: 500,
height:400,
modal: true,
open: function (event, ui) {
$("#jqGrid").jqGrid({
url: 'http://trirand.com/blog/phpjqgrid/examples/jsonp/getjsonp.php?callback=?&qwery=longorders',
mtype: "GET",
datatype: "jsonp",
colModel: [
{ label: 'OrderID', name: 'OrderID', key: true, width: 75 },
{ label: 'Customer ID', name: 'CustomerID', width: 150, editable:true },
{ label: 'Order Date', name: 'OrderDate', width: 150 },
{ label: 'Freight', name: 'Freight', width: 150 },
{ label:'Ship Name', name: 'ShipName', width: 150 }
],
viewrecords: true,
width: 480,
height: 250,
rowNum: 20,
pager: "#jqGridPager"
});
jQuery("#jqGrid").jqGrid('navGrid', '#jqGridPager', {
del: true, add: false, edit: true}
);
},
close:function () {}
});
});
$(document).ready(function () {
OuvrirEcran();
});
答案 0 :(得分:1)
jqGrid在创建模态对话框时应该使用 ui-dialog 类。
您必须修改 jquery.jqGrid.min.js 文件。
根据5.0.0版,
只需将 ui-dialog 类添加到以下行,
modal: { modal: "ui-widget ui-widget-content ui-corner-all ",
e.g。
modal: { modal: "ui-widget ui-widget-content ui-corner-all ui-dialog",
根据免费的jqGrid版本,
将 ui-dialog 类添加到以下行
dialog: {
...
window: "ui-widget ui-widget-content ui-corner-all ui-front",
...
e.g。
dialog: {
...
window: "ui-widget ui-widget-content ui-corner-all ui-front ui-dialog",
...
答案 1 :(得分:0)
问题的原因是jQuery UI对话框的内部方法_allowInteraction
内的代码jQuery UI the lines:
_allowInteraction: function( event ) {
if ( $( event.target ).closest( ".ui-dialog" ).length ) {
return true;
}
...
}
它可以阻止任何jQuery UI对话框之外的交互。
我将在免费的jqGrid代码中包含以下hack:我将添加行
if ($(h.w[0].ownerDocument).data("ui-dialog-overlays")) {
h.w.addClass("ui-dialog"); // hack to allow input inside of jQuery UI modal
}
在the line 之后
h.w.css("z-index", z);
$.jqm.open()
的。我的测试表明它解决了这个问题。
我现在在免费的jqGrid代码中进行一些其他更改。因此,我将在稍后发布我上面描述的修复程序。您可以使用jquery.jqgrid.4.12.1-jquerui-modal-fix.src.js对其进行发送。您可以在演示版http://jsfiddle.net/OlegKi/9ezy09ep/142/上对其进行测试。请在JSFiddle中使用http
而不是https
协议,因为我将修复程序放在不支持https的服务器上。