web-dev-qa-db-ja.com

カスタムjQueryでdrupalOverlayBeforeCloseをリッスンするにはどうすればよいですか?

特定のフォームの変更を監視しており、フォームを送信せずにフォームから移動しようとする前にユーザーに警告します。オーバーレイの閉じるボタンを除くすべてのインスタンスでこれが正常に機能しました。その要素はDrupal.overlay.close()関数にバインドされているため、ユーザーはそれをクリックしてすぐにオーバーレイを閉じることができます。 mすべての$('a')クリックをリッスンします。

_modules/overlay/overlay-parent.js_の内部を調べたところ、drupalOverlayBeforeCloseイベントが提供されているため、他のスクリプトが応答し、必要に応じてオーバーレイが閉じないようにできますが、これを実装する方法がわかりません。 $(document)などを使用して、このイベントをグローバルにリッスンしますか?または、Drupalオブジェクトを拡張して、何らかの形でこのイベントに関数をアタッチする必要がありますか?

6

次のコードを使用する必要があります。

_jQuery(document).bind('drupalOverlayBeforeClose', function(event) {
   // your code
   return false // This will prevent the overlay from closing.
});
_

click、dbclick、その他のメソッドは、それぞれbind('click', function(){})bind('dbclick', function(){})のショートカットメソッドです。ただし、drupalOverlayBeforeCloseというショートカットメソッドはありません。そのため、次のコードは機能しませんでした。

_$(document).drupalOverlayBeforeClose(function(event) {

});
_

したがって、バインドを使用して明示的にバインドする必要がありますdrupalOverlayBeforeCloseコールバックでfalseを返すと、オーバーレイは閉じられません。

これで答えが明確になることを願っています。

4
Mathankumar

次のコードを試してください

jQuery("#overlay-container").find("iframe").contents().find("#overlay-close").click(function (event) {
    console.log('Clicked on close overlay link');

    event.preventDefault();
    event.stopPropagation();

    var r = confirm("Do you want to close overlay?");
    if (r == true) {
        Drupal.overlay.close();
    } else {
        //do something else
    }


});

ユーザーが閉じるオーバーレイリンクをクリックすると、確認ダイアログが表示されます。

enter image description here

3