当模态对话框中的jqgrid时,自由jqgrid 4.12叠加问题

时间:2016-01-27 17:06:28

标签: jqgrid dialog modal-dialog free-jqgrid

我使用免费的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();
});

2 个答案:

答案 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的服务器上。