jquery-ui-dialog-ダイアログを閉じるイベントにフックする方法


186

jquery-ui-dialogプラグインを使用しています

ダイアログが閉じている状況でページを更新する方法を探しています。

ダイアログからcloseイベントをキャプチャする方法はありますか?

閉じるボタンがクリックされたときにコードを実行できることはわかっていますが、ユーザーがエスケープで閉じることや右上隅のxをカバーしていません。

回答:


248

私はそれを見つけた!

次のコードを使用して、閉じるイベントをキャッチできます。

 $('div#popup_content').on('dialogclose', function(event) {
     alert('closed');
 });

当然、私はアラートを必要なものに置き換えることができます。
編集: Jquery 1.7以降、bind()はon()になりました


3
タイプミス:$( 'div#popup_content')。bind( 'dialogclose'、function(event)){...}
CFNinja

1
これは役に立ちますが、$('div#popup_content')正しいですか?私のダイアログは次のように開かれていることを念頭に置いて、これを何に置き換えればよいですかjQuery.fn.dialog.open({})
Jake N

最初にダイアログが閉じてからアラートが表示されるのを確認します。それが全員にとって同じ状況である場合、誰かが私を助けてアラートが最初に表示され、次に[OK]をクリックするとウィンドウが閉じますか?私を訂正してください...
changeme

5
これは、廃止されたbind()の代わりにon()を使用するように更新する必要があります。
RBZ

2
jQuery UI Dialogがページで開かれたことがない場合、オーバーレイdivはDOMに存在しないことに注意してください。したがって、あなたの代わりにこのような何かを行うことを検討可能性があります$('body').on('dialogclose', '.ui-dialog', function(){...});
thdoan

192

ダイアログを作成するときにもできると思います(私が行ったプロジェクトからコピーしたもの):

dialog = $('#dialog').dialog({
    modal: true,
    autoOpen: false,
    width: 700,
    height: 500,
    minWidth: 700,
    minHeight: 500,
    position: ["center", 200],
    close: CloseFunction,
    overlay: {
        opacity: 0.5,
        background: "black"
    }
});

注意 close: CloseFunction


9
この答えは、受け入れられた答えよりも私には正しいようです。また、正しいAPIドキュメントは次の場所にあります:api.jqueryui.com/dialog/#event-close
Chris Gillum

2
Jake N-これを機能させるには、「CloseFunction」と呼ばれるダイアログにアクセスできる関数を実際に作成する必要があります。たとえば、次のように書くことができます var CloseFunction = function() { //Do your custom closing stuff here };
Adam Diament

これはオプションですが、コードはさまざまな場所で使用されています。選択した回答は、異なるコンテキストで異なる動作を追加し、ダイアログ作成コードを再利用して標準化する場合に有効です。
NectarSoft 2014

あなたはoverlay二度持っています。それは必須ではないですか?
radbyx 2015年

1
これは機能し、間違いなくここで必要かつ有用な回答ですが、Xまたは何かで閉じられたときだけでなく、ダイアログが何らかの方法で閉じられたときにも、CloseFunctionコードを実行します。したがって、Xまたは[キャンセル]ボタンでダイアログを閉じたときに特定のコードを実行したいが、他の何かが発生して閉じた場合(送信された入力が正しいと検証された場合など)は、これは実行されません。作業。
mikato

31
$("#dialog").dialog({
    autoOpen: false,
    resizable: false,
    width: 400,
    height: 140,
    modal: true, 
    buttons: {
        "SUBMIT": function() { 
        $("form").submit();
    }, 
        "CANCEL": function() { 
        $(this).dialog("close");
    } 
    },
    close: function() {
      alert('close');
    }
});

21
$( "#dialogueForm" ).dialog({
              autoOpen: false,
              height: "auto",
              width: "auto",
              modal: true,
                my: "center",
                at: "center",
                of: window,
              close : function(){
                  // functionality goes here
              }  
              });

ダイアログの「閉じる」プロパティは、同じに閉じるイベントを与えます。


16

Uもこれを試すことができます

$("#dialog").dialog({
            autoOpen: false,
            resizable: true,
            height: 400,
            width: 150,
            position: 'center',
            title: 'Term Sheet',
            beforeClose: function(event, ui) { 
               console.log('Event Fire');
            },
            modal: true,
            buttons: {
                "Submit": function () {
                    $(this).dialog("close");
                },
                "Cancel": function () {
                    $(this).dialog("close");
                }
            }
        });

10

これは私のために働いたものです...

$('#dialog').live("dialogclose", function(){
   //code to run on dialog close
});

8

jQuery 1.7以降、.on()メソッドは、イベントハンドラーをドキュメントに添付するための推奨メソッドです。

実際にを使用して回答を作成した人はいないためです。on()代わりbind()に作成することにしました。

$('div#dialog').on('dialogclose', function(event) {
     //custom logic fired after dialog is closed.  
});

6

サンプルのようにオプション「閉じる」を追加し、インライン関数にしたいことを行います

close: function(e){
    //do something
}

4

私があなたが話しているウィンドウのタイプを理解しているなら、(ダイアログウィンドウの)$(window).unload()はあなたに必要なフックを与えませんか?

(そして、私が誤解し、ポップアップブラウザウィンドウではなくCSSを介して作成されたダイアログボックスについて話している場合、そのウィンドウを閉じる方法はすべて、クリックハンドラーを登録できる要素です。)

編集:ああ、CSS経由で作成されたjquery-uiダイアログについて話しているのがわかります。要素のクリックハンドラーをクラスui-dialog-titlebar-closeに登録することで、ウィンドウを閉じるXをフックできます。

もっと便利なのは、おそらくそれをすばやく理解する方法を教えてくれることでしょう。ダイアログを表示しながら、ちょうどオープン放火犯をポップし、点検し、ウィンドウを閉じることができます要素を。それらがどのように定義されているかがすぐにわかり、クリックハンドラーを登録するために必要なものがわかります。

だからあなたの質問に直接答えるには、答えは本当に「いいえ」だと思います-フックできるcloseイベントはありませんが、 "はい"-ダイアログボックスをかなり簡単に閉じて取得するすべての方法をフックできますあなたが欲しいもの。


ねえアンディ。私はcssとjavascriptを介して作成されたjquery-uiからのダイアログを使用しています。コードを見ると、そこにはフックがあると思いますが、それを取得する方法がわかりません。
ブラウニー

2

次のコードを試して、任意のアイテムの終了イベントをキャプチャすることができます:ページ、ダイアログなど。

$("#dialog").live('pagehide', function(event, ui) {
      $(this).hide();
});

1
.live()や.bind()の代わりに.on()を使用してください
cssyphus
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.