2013-11-28 15 views
5

Ich bin, versuche, die 'bestätigen' Box von JavaScript mit jquery Dialog zu replizieren. Dies ist mein Code,jquery ui Dialogfeld als bestätigen

Aber wenn ich versuchte, diese Methode zu warnen, zeigt es 'undefined'. Es wartet nicht darauf, dass das Popup angezeigt wird. Wie kann ich diese customConfirm-Funktion auf die Benutzereingabe warten lassen (ok/cancel) ?. Meine Notwendigkeit ist, dass die Methode customConfirm() entweder True von false nach Benutzereingaben zurückgibt.

Antwort

7

Was Sie tun müssen, ist jQuery.deferred/Versprechen verwenden.

http://api.jquery.com/deferred.promise/

In diesem Beispiel asyncEvent

1) erzeugt ein jquery Objekt latenten

2) hat eine Logik zum Auflösungs-/ablehnen, Ihre ok/stornieren

3) liefert eine deferred.promise() - Objekt, das dann mit einem $ .when verwendet werden kann, um festzustellen, ob ein zurückgestelltes Objekt aufgelöst oder zurückgewiesen wurde (ok/cancel).

Was würden Sie tun, ist

1) erstellen jquery latente Objekt

2) starten Sie Ihren Dialog mit OK/Cancel Einstellung der deferred.resolve/reject

3) liefern eine latente .promise() Objekt,

4) Verwenden Sie das latente Versprechen Objekt mit $ .when http://api.jquery.com/jQuery.when/

Sie könnten auch nur Entschlossenheit verwenden und bestimmen, ob die confirm in dem $ .when, wahr oder falsch war

function customConfirm(customMessage) { 
    var dfd = new jQuery.Deferred(); 
    $("#popUp").html(customMessage); 
    $("#popUp").dialog({ 
     resizable: false, 
     height: 240, 
     modal: true, 
     buttons: { 
      "OK": function() { 
       $(this).dialog("close"); 
       alert(true); 
       dfd.resolve(true); 
      }, 
      Cancel: function() { 
       $(this).dialog("close"); 
       alert(false); 
       dfd.resolve(false); 
      } 
     } 
    }); 
    return dfd.promise(); 
} 

$.when(customConfirm('hey')).then(
    function(confirm) { 

    if(confirm){alert("things are going well");} 
    else{alert("you fail this time");} 
}); 

Hoffnung, das hilft.

+0

Folgen Sie diesem und anderen Beispielen mit jQuery 3.1.0 und jQuery UI 1.12.0, die versuchen, einen Bestätigungsdialog zu erstellen. Erstellte vor dem Ausführen von '$ .when()' eine Standardvariable. Gefunden, dass die Variable übergeben wurde, bevor '$ .when()' abgeschlossen wurde. Irgendwelche Vorschläge oder Ratschläge? – Twisty

+0

FYI - Ich habe mein Problem gefunden. Ich habe die anonyme Funktion verwendet und die Variablen im Inneren würden nach der Ausführung verloren gehen. Der Wechsel zu einer bereits definierten Funktion hat geholfen. – Twisty

2

Sie sollten den Dialog für die Dokumentbereitschaftsfunktion laden. Rufen Dialog geöffnet customConfirm Funktion,

function customConfirm(customMessage) { 
    $("#popUp").html(customMessage); 
    $("#popUp").dialog("open"); 
    } 

    $(document).ready(function(){ 
    $("#popUp").dialog({ 
     resizable: false, 
     autoOpen: false, 
     height: 240, 
     modal: true, 
     buttons: { 
      "OK": function() { 
       $(this).dialog("close"); 
       alert(true); 
       return true; 
      }, 
      Cancel: function() { 
       $(this).dialog("close"); 
       alert(false); 
       return false; 
      } 
     } 
    }); 

    }); 
+0

es funktioniert nicht importieren. immer noch zeigt es die Nachricht nicht definiert, wenn ich customConfirm aufrufen –

+0

Ist 'customMessage' param einen Wert? Versuchen Sie es zu consol.log. – Masudul

+0

Ich habe so versucht, alert (customConfirm ("customMessage")); –

7

Dies ist, was ich mit Zepto mit Modulen verzögerte und Rückrufe tun, funktioniert wie ein Charme. Sollte für jquery ähnlich sein oder Sie können nur die latenten und Rückrufe Module in Ihre html

function customConfirm(customMessage) { 
    var d = new $.Deferred(); 
    $("#popUp").html(customMessage); 
    $("#popUp").dialog({ 
     resizable: false, 
     height: 300, 
     modal: true, 
     buttons: { 
      "Yes": function() { 
       $(this).dialog("close"); 
       d.resolve() 
      }, 
      "No": function() { 
       $(this).dialog("close"); 
       d.reject(); 
      } 
     } 
    }); 
return d.promise(); 
} 

customConfirm("Do you Want to delete the File?") 
.then(function(){ 
    console.log("You Clicked Yes") 
}) 
.fail(function(){ 
    console.log("You Clicked No") 
}); 
+0

Das funktioniert großartig. Allerdings fehlt ein Semikolon nach 'var d = new $ .Deferred()'. Es sollte 'var d = new $ .Deferred();' – steviethecat

+0

Danke behoben werden. Aber JavaScript interessiert sich nicht für Semikolons. – pyros2097

Verwandte Themen