2

行を編集するときに開く編集フォーム モーダルの背後にあるオーバーレイをクリックすると、クリックで閉じるのを無効にしようとしていますが、どうすればよいかわかりません。私は次のようなことを試みていました:

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

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

しかし、これはボタンをクリックした場合にのみトリガーされ'X'ます。オーバーレイ (モーダル外) をクリックすると、モーダルが閉じられ、そのアラートはトリガーされません。私が望むのは、モーダルの外をクリックするか、そのオーバーレイを削除するときに、その閉じる機能を無効にすることです。

ありがとう。

4

1 に答える 1

6

面白い問題です。onCloseオーバーレイをクリックした場合 (モーダル ダイアログの外をクリックした場合)、コールバックは呼び出されず、ダイアログは閉じられます。

面白いですがjqModal.js、要件を実装するのに最適なオプションが既にあります。のcloseoverlayオプションです$.fn.jqm(を参照)。問題は、jqGrid にオプションを設定できるパブリック プロパティがないことです。jquery.jqGrid.src.jsを変更するだけcloseoverlay : trueで( in の変更にcloseoverlay : false対応します)、必要な動作が得られます。closeoverlay:!0closeoverlay:!1jquery.jqGrid.min.js

問題は、コード jqGrid を変更せずに要件を実現する簡単な方法が見当たらないことです。

更新:jqModal.jsモジュールのコードをもう一度分析したところ、 jqGridのソース コードを変更せずに簡単な方法を見つけました。モジュールは最小化された形でしか存在しないため、分析は困難です。そのため、コードを読むのは困難です。

jqModal.js解決策:モジュールのデフォルトを変更する次の行を含める必要があります。

$.jqm.params.closeoverlay = false;

説明:モジュールの行は次のように初期化されますjqModal.js$.jqm

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

したがって、インクルードした後のどこでも、空のオブジェクトとしてjquery.jqGrid.min.js持っています。$.jqm.paramsのパラメータのデフォルト値を提供するために使用できますjqModal.js(のパラメータのリストで直接指定されていません$.jqm)。したがって、オーバーレイをクリックしたときに jqGrid ダイアログを閉じることを拒否するために、 (または) の$.jqm.params.closeoverlay = false;後のどこかに含めることができます。jquery.jqGrid.min.jsjquery.jqGrid.src.js

于 2013-05-03T21:42:28.797 に答える