2013-05-03 64 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