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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top