特定のフォームの変更を監視しており、フォームを送信せずにフォームから移動しようとする前にユーザーに警告します。オーバーレイの閉じるボタンを除くすべてのインスタンスでこれが正常に機能しました。その要素はDrupal.overlay.close()
関数にバインドされているため、ユーザーはそれをクリックしてすぐにオーバーレイを閉じることができます。 mすべての$('a')
クリックをリッスンします。
_modules/overlay/overlay-parent.js
_の内部を調べたところ、drupalOverlayBeforeClose
イベントが提供されているため、他のスクリプトが応答し、必要に応じてオーバーレイが閉じないようにできますが、これを実装する方法がわかりません。 $(document)
などを使用して、このイベントをグローバルにリッスンしますか?または、Drupalオブジェクトを拡張して、何らかの形でこのイベントに関数をアタッチする必要がありますか?
次のコードを使用する必要があります。
_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を返すと、オーバーレイは閉じられません。
これで答えが明確になることを願っています。
次のコードを試してください
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
}
});
ユーザーが閉じるオーバーレイリンクをクリックすると、確認ダイアログが表示されます。