it-swarm.com.de

jquery-ui-dialog - Wie man sich in dialog close event einfügt

Ich benutze die jquery-ui-dialog Plugin

Ich suche nach einer Möglichkeit, die Seite zu aktualisieren, wenn der Dialog unter bestimmten Umständen geschlossen wird.

Gibt es eine Möglichkeit, ein Abschlussereignis aus dem Dialogfeld zu erfassen?

Ich weiß, dass ich Code ausführen kann, wenn auf die Schaltfläche zum Schließen geklickt wird, aber dies deckt nicht das Schließen des Benutzers mit Escape oder dem x in der oberen rechten Ecke ab.

179
Brownie

Ich habe es gefunden!

Sie können das Abschlussereignis mit dem folgenden Code abfangen:

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

Natürlich kann ich den Alarm durch alles ersetzen, was ich tun muss.
Edit: Ab Jquery 1.7 wurde bind () zu on ()

245
Brownie

Ich glaube, Sie können dies auch tun, während Sie den Dialog erstellen (kopiert aus einem Projekt, das ich erstellt habe):

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"
    }
});

Hinweis close: CloseFunction

183
Darryl Hein
$("#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');
}**
});
31
Mo Ming C
$( "#dialogueForm" ).dialog({
              autoOpen: false,
              height: "auto",
              width: "auto",
              modal: true,
                my: "center",
                at: "center",
                of: window,
              close : function(){
                  // functionality goes here
              }  
              });

Die Eigenschaft "close" des Dialogfelds gibt das Ereignis "close" für dasselbe aus.

20
Taksh

Sie können dies auch versuchen

$("#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");
                }
            }
        });
15
Umair Noor

Das hat bei mir funktioniert ...

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

Ab jQuery 1.7 ist die .on () -Methode die bevorzugte Methode zum Anhängen von Ereignishandlern an ein Dokument.

Da niemand wirklich eine Antwort mit .on() anstelle von bind() erstellt hat, habe ich beschlossen, eine zu erstellen.

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

füge die Option 'close' hinzu wie unter sample und mach was du willst inline function

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

Wenn ich die Art des Fensters verstehe, über das Sie sprechen, würde nicht $ (window) .unload () (für das Dialogfenster) geben Sie den Haken, den Sie brauchen?

(Und wenn ich es falsch verstanden habe und Sie über ein Dialogfeld sprechen, das über CSS statt über ein Popup-Browserfenster erstellt wurde, dann alle Die Möglichkeiten zum Schließen dieses Fensters sind Elemente, für die Sie Klick-Handler registrieren können.)

Bearbeiten: Ah, ich sehe jetzt, dass Sie über jquery-ui-Dialoge sprechen, die über CSS erstellt werden. Sie können den Haken X Dadurch wird das Fenster geschlossen, indem ein Klick-Handler für das Element in der Klasse registriert wird ui-dialog-titlebar-close.

Vielleicht ist es sinnvoller, Ihnen zu sagen, wie Sie das schnell herausfinden können. Öffnen Sie während der Anzeige des Dialogfelds einfach FireBug und Prüfen die Elemente, die das Fenster schließen können. Sie werden sofort sehen, wie sie definiert sind, und das gibt Ihnen alles, was Sie zum Registrieren der Klick-Handler benötigen.

Um Ihre Frage direkt zu beantworten, lautet die Antwort meines Erachtens "Nein". Es gibt kein Ereignis zum Schließen, aber "Ja" - Sie können alle Möglichkeiten nutzen, um das Dialogfeld relativ einfach zu schließen und zu öffnen was du willst.

4
andy

Sie können den folgenden Code zum Erfassen des Abschlussereignisses für jedes Element verwenden: Seite, Dialogfeld usw.

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