jQuery UI Dialog: イベントハンドラでダイアログ閉鎖時の処理をカスタマイズ
jQuery UI Dialog: ダイアログ閉閉イベントへのフック
本記事では、jQuery UI Dialog のダイアログ閉閉イベントにフックする方法について解説します。
前提条件
以下の環境を想定しています。
- jQuery 1.12 以上
イベントの種類
ダイアログ閉閉イベントは以下の種類があります。
beforeclose
: ダイアログが閉じられる前に発生します。イベント処理内でevent.preventDefault()
を呼び出すことで、ダイアログの閉鎖をキャンセルできます。close
: ダイアログが閉じられた後に発生します。
イベントへのフック方法
イベントへのフックには以下の方法があります。
dialog()
メソッドのオプション
dialog()
メソッドの beforeclose
または close
オプションにイベントハンドラ関数を指定することで、イベント発生時に呼び出されます。
$( ".selector" ).dialog({
beforeclose: function( event, ui ) {
// ダイアログ閉鎖前の処理
},
close: function( event, ui ) {
// ダイアログ閉鎖後の処理
}
});
on()
メソッド
ダイアログ要素に対して on()
メソッドを用いてイベントハンドラ関数を登録できます。
$( ".selector" ).on( "dialogbeforeclose", function( event, ui ) {
// ダイアログ閉鎖前の処理
});
$( ".selector" ).on( "dialogclose", function( event, ui ) {
// ダイアログ閉鎖後の処理
});
イベントオブジェクト
イベントオブジェクトには以下のプロパティが含まれます。
type
: イベントの種類target
: イベントが発生した要素namespace
: イベントの名前空間originalEvent
: 元となるブラウザイベントui
: イベント固有の情報を含むオブジェクト
例
以下の例では、beforeclose
イベントを使用して、ダイアログ閉鎖前に確認メッセージを表示しています。
$( ".selector" ).dialog({
beforeclose: function( event, ui ) {
if ( !confirm( "ダイアログを閉じますか?" ) ) {
event.preventDefault();
}
}
});
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>jQuery UI Dialog: ダイアログ閉閉イベント</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
<link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
</head>
<body>
<div id="dialog">
<p>ダイアログの内容</p>
</div>
<script>
$( "#dialog" ).dialog({
beforeclose: function( event, ui ) {
if ( !confirm( "ダイアログを閉じますか?" ) ) {
event.preventDefault();
}
}
});
</script>
</body>
</html>
上記コードを実行すると、以下の動作になります。
- ダイアログが表示されます。
- ダイアログの閉じるボタンをクリックすると、確認メッセージが表示されます。
- 確認メッセージで「OK」をクリックすると、ダイアログが閉じます。
close
イベントを使用して、ダイアログ閉鎖後に処理を行う例- 複数のダイアログを同時に開き、それぞれ異なるイベントハンドラを設定する例
$( ".selector" ).dialog({
beforeClose: function( event, ui ) {
// ダイアログ閉鎖前の処理
},
close: function( event, ui ) {
// ダイアログ閉鎖後の処理
}
});
$( ".selector" ).on( "dialogbeforeclose", function( event, ui ) {
// ダイアログ閉鎖前の処理
});
$( ".selector" ).on( "dialogclose", function( event, ui ) {
// ダイアログ閉鎖後の処理
});
bind()
メソッドは on()
メソッドと似ていますが、非推奨です。
$( ".selector" ).bind( "dialogbeforeclose", function( event, ui ) {
// ダイアログ閉鎖前の処理
});
$( ".selector" ).bind( "dialogclose", function( event, ui ) {
// ダイアログ閉鎖後の処理
});
live()
メソッドは現在非推奨です。代わりに on()
メソッドを使用することを推奨します。
$( ".selector" ).live( "dialogbeforeclose", function( event, ui ) {
// ダイアログ閉鎖前の処理
});
$( ".selector" ).live( "dialogclose", function( event, ui ) {
// ダイアログ閉鎖後の処理
});
delegate()
メソッド
delegate()
メソッドはイベントハンドラ関数を動的に登録できます。
$( ".container" ).delegate( ".selector", "dialogbeforeclose", function( event, ui ) {
// ダイアログ閉鎖前の処理
});
$( ".container" ).delegate( ".selector", "dialogclose", function( event, ui ) {
// ダイアログ閉鎖後の処理
});
javascript jquery jquery-ui