2009-08-25 6 views
3

Ich habe Erstellen und Abbrechen Schaltflächen als Teil eines jquery-ui modalen Dialogfelds. Ich möchte etwas nach dem Schließen des Dialogs nur tun, wenn der Benutzer auf "Erstellen" klickt. Wenn sie auf "Abbrechen" oder "X" klicken oder Esc drücken, möchte ich etwas anderes tun. Gibt es eine Möglichkeit, Parameter an den Close-Event-Handler zu übergeben oder einen anderen Weg zu erkennen, was den Close verursacht hat?wie zu erkennen, was das Schließen-Ereignis in jquery UI-Dialog ausgelöst

Antwort

4

versuchen, dies wie hier discribed: http://jqueryui.com/demos/dialog/#modal-confirmation

- bearbeiten

aus dem Link von oben kopiert:

var trigger = ""; 
    $("#dialog").dialog({ 
     bgiframe: true, 
     resizable: false, 
     height:140, 
     modal: true, 
     overlay: { 
      backgroundColor: '#000', 
      opacity: 0.5 
     }, 
     buttons: { 
      'Create': function() { 
       // do your stuff 
       trigger = "create"; 
       $(this).dialog('close'); 
      }, 
      Cancel: function() { 
       $(this).dialog('close'); 
      } 
     } 
     close: function() { 
      if (trigger == "create") 
       // do something here 
     } 
    }); 
+0

Richtig, ich frage mich, wie ich innerhalb der nahen Handler erkennen kann, was es ausgelöst hat. – Riz

+0

mh, auf dem Kopf - deklariere einen var trigger = ""; als global und setze es in der 'Create' Funktion. Dann kannst du den Wert im Close-Handler bekommen ... – stefita

+0

doh! Danke, Mann! – Riz

4

definieren Ereignisse für Ihre Schaltflächen wie folgt aus:

$("#dialog").dialog({ 
     bgiframe: true, 
     autoOpen: false, 
     height: 300, 
     modal: true, 
     buttons: { 
      'Create': function() { 
       alert('the user clicked create'); 
       $(this).dialog('close'); 
      }, 
      Cancel: function() { 
       alert('the user clicked cancel'); 
       $(this).dialog('close'); 
      } 
     }, 
     close: function() { 
      // do somthing 

     } 
}); 

Schauen Sie sich auch die Parameter pa an ssed in der Nähe Fall ist die Methode Unterschrift:

function(event, ui) 

Sie hier weitere Informationen link text

+0

Richtig, ich frage mich, wie ich innerhalb des Close-Handler erkennen kann, was es ausgelöst hat. – Riz

0
$('#jqPopup').dialog({modal:true,title:tit,autoOpen:false,beforeclose:function(){ 
    //Will get triggered when user press the 'X' button 
    $("#wholeContent").css('display','block');} 
}); 

$("#wholeContent").css('display','none'); 

$('#jqPopup').dialog('open'); 
5

In der Nähe Ereignis, was Sie sagen, finden, indem man die Ereignis Parameter passiert (Parameter 1).

Wenn der Dialog durch Klicken auf die geschlossen wurde [x] dann erhalten Sie Maus-Ereignis Felder aus.

Und falls der Dialog durch Drücken Flucht geschlossen wurde dann erhalten Sie Tastatur-Ereignis Felder aus.

Wenn der Dialog programmgesteuert geschlossen wurde, gilt keines der oben genannten.

Also, ein guter Ort, um zu beginnen ist zu sehen event.which. Schließen mit der [x] bedeutet, dass Sie den Wert der Maustaste (1 bis 3) erhalten, und schließen mit Escape bedeutet, dass Sie den Schlüsselcode (27) erhalten. Closing programmatisch bedeutet event.which wird nicht definiert.

auf Ihre Frage jetzt zurück ...

Sie wollen eine Sache tun, wenn sie erstellen drücken - das ist einfach, es ist nur für diese Schaltfläche in der Funktion setzen.

Sie möchten etwas anderes auf [x], Escape oder klicken Sie auf Abbrechen. Erstellen Sie eine Funktion mit dem Namen cancelled() (oder was auch immer) und rufen Sie dann diese Funktion auf die Schaltfläche Abbrechen und rufen Sie es in dem Schließen Ereignis , wenn event.which einen Wert hat.

So etwas ...

buttons: { 
    'Create': function() { 
     // do your stuff here 
     $(this).dialog('close'); 
    }, 
    Cancel: function() { 
     cancelled(); 
     $(this).dialog('close'); 
    } 
}, 
close: function(event) { 
    if (event.which) { 
     cancelled(); 
    } 
} 

denke ich, dass deckt, was Sie brauchen, und es vermeidet mess um eine Variable zu schaffen, um zu verfolgen, wo Sie sind.

+0

Wirklich für mich gearbeitet. Vielen Dank! Ich hoffe, dass sie irgendwann etwas in den Dialog einbauen, der die Quelle erkennen würde. – Aamir

Verwandte Themen