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:ofjqModal.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…
做了一些修改,但仍然认为应该有一种更好、更直观的方法。