Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JQGRID-JQMODAL:单击覆盖时禁用关闭模式_Javascript_Jquery_Jqgrid_Jqmodal - Fatal编程技术网

Javascript JQGRID-JQMODAL:单击覆盖时禁用关闭模式

Javascript JQGRID-JQMODAL:单击覆盖时禁用关闭模式,javascript,jquery,jqgrid,jqmodal,Javascript,Jquery,Jqgrid,Jqmodal,我试图在单击编辑行时打开的“编辑表单”模式后面的覆盖时禁用“单击关闭”,但我不知道该如何操作。我试着做一些类似的事情: editOptions: { url: 'foo/edit.html', mtype: 'PUT', //some other options closeAfterEdit: true, reloadAfterSubmit: true, onClose: function() { alert('Hi ^_^');

我试图在单击编辑行时打开的“编辑表单”模式后面的覆盖时禁用“单击关闭”,但我不知道该如何操作。我试着做一些类似的事情:

editOptions: {
    url: 'foo/edit.html',
    mtype: 'PUT',

    //some other options
    closeAfterEdit: true,
    reloadAfterSubmit: true,
    onClose: function() {
        alert('Hi ^_^');
    }
}
但这只有在我点击
'X'
按钮时才会触发。如果我点击覆盖(脱离模式),它会关闭模式,并且警报不会触发。我想要的是,当我点击退出模式或删除覆盖时,禁用关闭功能


谢谢。

这是个有趣的问题<如果单击覆盖(如果从模式对话框中单击),则不会调用code>onClosecallback,对话框将关闭

这很有趣,但是
jqModal.js
已经有了一个选项,可以完美地实现您的需求。它是
$.fn.jqm
closeoverlay
选项(请参阅)。问题是jqGrid没有任何允许设置选项的公共属性。如果您只是将
jquery.jqGrid.src.js
closeoverlay:true
修改为
closeoverlay:false
(它对应于在
jquery.jqGrid.min.js
中将
closeoverlay:!0
更改为
closeoverlay:!1
),那么您将拥有所需的行为

问题是,我看不到任何不修改jqGrid代码就能实现需求的简单方法

更新:我再次分析了
jqModal.js
模块的代码,发现了一种简单的方法,不需要更改jqGrid的源代码。分析是困难的,因为模块仅以最小化的形式存在。所以很难读懂代码

解决方案:您应该包括以下行,它更改了
jqModal.js
模块的默认值:

$.jqm.params.closeoverlay=false;
Description:of
jqModal.js
模块初始化
$.jqm

$.jqm = {
    hash: {},
    open: function (s,t) { ... },
    close: function (s) { ... },
    params: {}
};

因此,在包含
jquery.jqGrid.min.js
之后的任何地方,都将
$.jqm.params
作为空对象。它可用于提供
jqModal.js
参数的默认值(在
$.jqm
的参数列表中未直接指定)。因此,您可以包括
$.jqm.params.closeoverlay=false
位于
jquery.jqGrid.min.js
(或
jquery.jqGrid.src.js
)之后的某个地方,以拒绝在单击覆盖时关闭jqGrid对话框

是的,要做到这一点并不容易。此外,我还想向jqGrid开发人员推荐它。我会检查你的建议。非常感谢!!这是可行的,但我认为他们应该用一种简单的方法来做到这一点,比如一处新的房产。如果你认为这是一个好主意,建议开发人员,我会建议他们。我也很抱歉没有解释我之前发布的其他问题。就像我说的,谢谢你^_^@不客气!正如我所写的,在源代码中更改
closeoverlay
通常不是最好的方法,但实际上是最简单的方法。我稍后会将相应的建议发布到trirand。问题是jqGrid的代码中多次在内部使用jqModal模块。因此,在jqGrid方法中公开该选项将遵循jqGrid代码中许多行的更改。您只需将下面的选项转发给jqModal模块即可。@DaGLiMiOuX:我找到了更好的解决方法:请参阅我答案的更新部分。再次感谢!因此,如果我想禁用特定页面中的覆盖,而不是更改源代码,让它禁用任何其他页面的覆盖,那么我必须在创建jqGrid的任何JS处添加该行?这句话其实并不难实现,已经用
$.extend…
做了一些修改,但仍然认为应该有一种更好、更直观的方法。