Aufschalten Javascript Bestätigen (), während die Callback-Erhaltung
-
28-09-2019 - |
Frage
Auf den Punkt gebracht, möchte ich die Standard js confirm()
Funktion innerhalb einer jQuery-Plugin außer Kraft zu setzen. Ich habe herausgefunden, wie es mit dem einfachen Funktion Layout zu tun unten.
function confirm(opts) {
//code
}
Nun, was ich tun möchte, ist eine andere Funktion innerhalb der confirm
Funktion aufrufen, oben, wie so ...
function confirm(opts) {
openModal(opts);
}
Die openModal
Funktion öffnet ein benutzerdefinierte modalen Fenster mit der Meldung und die erforderlichen Tasten. Die Tasten sind beide <span>
mit dem id
entweder submit
oder cancel
. submit
gibt true zurück und cancel
false zurück. Aber jetzt, wie kehre ich entweder wahr oder falsch ist, basierend auf den Button geklickt?
Zum Beispiel ...
$('#openModal').live('click', function() {
var opts = { title:'Modal Title', message:'This is a modal!' };
var resp = confirm(opts);
if(resp)
// user clicked <span id="submit"></span>
else
// user clicked <span id="cancel"></span>
});
Hoffentlich Sie verstehen, was ich meine.
Lösung
Das ist möglich, aber nicht genau so, wie Sie beschreiben. Die typische Art und Weise die Bestätigungsfunktion verwendet wird, ist:
if(confirm("Are you sure you want to submit this form?")) {
form.submit();
}
Im obigen Beispiel wird die Taste drückt synchron an das Skript zurückgegeben. Die Ausführung wird in der Funktion angehalten, bis eine Taste gedrückt wird.
Ein „modaler Dialog“ ist nur ein Overlay über den gesamten Inhalt einer HTML-Webseite. Um den Browser, Schaltflächen innerhalb einer solchen Overlay funktionieren auf die gleiche Art und Weise wie Knöpfe anderswo innerhalb dieser Seite tun.
Da JavaScript solche Tastenklicks asynchron behandelt (das heißt Callback-Funktionen verwenden Ereignisse zu behandeln) und nicht synchron, der Ansatz, den Sie versuchen, wird nicht funktionieren.
Sie müssten alle Teile des Codes ändern, die die Bestätigungs Funktion wie folgt aussehen:
confirm("Are you sure you want to submit this form?", function(result) {
if(result) {
form.submit();
}
});
Das würde funktionieren genauso einen Event-Handler mit jQuery Registrierung selbst tut. Skriptausführung setzt sofort Vergangenheit in der anonymen Funktion der gesamten Code zu überspringen. Später wird der Browser indirekt über eine JavaScript-Event-Handler diese Funktion aufrufen, dass Sie in der Bestätigungsfunktion registrieren, dessen Zweck die Callback-Funktion mit beiden true
oder false
gegebenenfalls nennen.