Question

J'utilise le plug-in jquery-ui-dialog

.

Je cherche un moyen d'actualiser la page lorsque, dans certaines circonstances, le dialogue est fermé.

Existe-t-il un moyen de capturer un événement proche à partir de la boîte de dialogue?

Je sais que je peux exécuter du code lorsque l'utilisateur clique sur le bouton de fermeture, mais cela ne couvre pas l'utilisateur qui ferme avec un signe d'échappement ou le x dans le coin supérieur droit.

Était-ce utile?

La solution

je l'ai trouvé!

Vous pouvez intercepter l'événement de fermeture à l'aide du code suivant:

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

Évidemment, je peux remplacer l'alerte par tout ce que je dois faire.
Modifier: Depuis Jquery 1.7, la méthode bind () est activée ()

.

Autres conseils

Je crois que vous pouvez également le faire tout en créant le dialogue (copié d'un projet que j'ai fait):

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

Remarque close: CloseFunction

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

" fermer " La propriété de dialog donne l'événement de fermeture pour le même.

Vous pouvez aussi essayer ceci

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

C’est ce qui a fonctionné pour moi ...

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

À partir de jQuery 1.7, la méthode .on () est la méthode recommandée pour attacher des gestionnaires d'événements à un document.

Parce que personne n'a créé de réponse avec. on () au lieu de bind () , j'ai décidé d'en créer une.

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

ajoutez l'option 'close' comme sous l'échantillon et faites ce que vous voulez dans la fonction en ligne

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

Si je comprends le type de fenêtre dont vous parlez, $ (window) .unload () (pour la fenêtre de dialogue) ne vous donnera-t-il pas le crochet dont vous avez besoin?

(Et si j’ai mal compris, et que vous parlez d’une boîte de dialogue créée via CSS plutôt que d’une fenêtre de navigateur contextuelle, toutes les façons de fermer cette fenêtre sont des éléments pour lesquels vous pouvez enregistrer des gestionnaires de clic .)

Modifier: Ah, je vois que vous parlez de dialogues jquery-ui, qui sont créés via CSS. Vous pouvez accrocher le X qui ferme la fenêtre en enregistrant un gestionnaire de clics pour l'élément avec la classe ui-dialog-titlebar-close .

Il est peut-être plus utile de vous dire comment résoudre rapidement ce problème. Lorsque vous affichez la boîte de dialogue, ouvrez simplement FireBug et Inspectez les éléments pouvant fermer la fenêtre. Vous verrez instantanément comment ils sont définis et cela vous donne ce dont vous avez besoin pour enregistrer les gestionnaires de clics.

Donc, pour répondre directement à votre question, je pense que la réponse est vraiment "non". - Il n'y a pas d'événement proche auquel vous pouvez participer, mais "oui". - vous pouvez utiliser toutes les méthodes pour fermer la boîte de dialogue assez facilement et obtenir ce que vous voulez.

Vous pouvez essayer le code suivant pour capturer l'événement de clôture pour n'importe quel élément: page, boîte de dialogue, etc.

$("#dialog").live('pagehide', function(event, ui) {
      $(this).hide();
});
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top