2013-05-03 34 views
2

我试图在单击编辑表单后面的覆盖时单击禁用关闭关闭当我编辑行时打开的模式,但我不知道如何执行此操作。我试图像这样:JQGRID - JQMODAL:单击覆盖时禁用关闭模式

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

    //some other options 
    closeAfterEdit: true, 
    reloadAfterSubmit: true, 
    onClose: function() { 
     alert('Hi ^_^'); 
    } 
} 

但如果我点击'X'按钮,这只是触发。如果我点击overlay(超出模式),它将关闭模式,并且该警报从不触发。我想要的是当我点击模式或删除覆盖时禁用该关闭功能。

谢谢。

回答

6

这是一个有趣的问题。 onClose如果点击叠加层(如果点击了模式对话框),回调将不会被调用,对话框将被关闭。

这很有趣,但jqModal.js已经有了完美的选项来实现你的requiremens。它的closeoverlay选项$.fn.jqm(见the line)。问题是jqGrid没有任何允许设置选项的公共属性。如果你只是修改jquery.jqGrid.src.jscloseoverlay : truecloseoverlay : false(它对应closeoverlay:!0更改为closeoverlay:!1jquery.jqGrid.min.js),那么你将有你需要的行为。

问题是,我没有看到任何简单的方法来实现您的要求,而无需修改代码jqGrid。

修订:我分析的jqModal.js模块一次代码和心中已经发现简单的方式不改变的jqGrid的源代码。分析很困难,因为模块只能以最小化的形式存在。所以很难阅读代码。

解决办法:你应该包括以下行这改变jqModal.js模块的默认设置:

$.jqm.params.closeoverlay = false; 

说明:jqModal.jsthe lines模块初始化$.jqm

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

所以到处都包括jquery.jqGrid.min.js你后有$.jqm.params作为空对象。它可用于提供参数jqModal.js的缺省值(它们不是在$.jqm参数列表中直接指定的参数)。因此,您可以在jquery.jqGrid.min.js(或jquery.jqGrid.src.js)之后的某个位置包含$.jqm.params.closeoverlay = false;以拒绝在点击叠加层时关闭jqGrid对话框。

+0

是的,这不是一个简单的方法来做到这一点。另外,我想向jqGrid开发人员推荐它。我会检查你的建议。 – DaGLiMiOuX 2013-05-06 07:19:05

+0

非常感谢你!它有效,但我认为他们应该做一个简单的方法来做到这一点,例如一个新的属性。如果你认为向开发者建议是个好主意,那么我会向他们提出建议。也想道歉,不要在我之前发布的其他问题上解释。正如我所说,谢谢!^_^ – DaGLiMiOuX 2013-05-06 07:29:03

+1

@DaGLiMiOuX:不客气!正如我写到在源代码中更改“closeoverlay”通常不是最好的方法,但它实际上是最简单的* *。我稍后会将相应的建议发布到trirand。问题是jqModal模块在jqGrid的代码中使用了很多次*内部*。所以在jqGrid方法中公开这个选项将会改变许多jqGrid代码行。人们只需要将下面的选项转发给jqModal模块。 – Oleg 2013-05-06 07:36:05