Wie löst man ein Ereignis nach der Verwendung von event.preventDefault () aus?
Ich möchte eine Veranstaltung, bis ich bereit bin, es zu feuern.e.g
$('.button').live('click', function(e){
e.preventDefault();
//do lots of stuff
e.run() //this proceeds with the normal event
}
Gibt es ein äquivalent zu den run()
Funktion oben beschrieben?
Kommentar zu dem Problem
Das Standard-Verhalten tritt nur auf, wenn der handler zurückkehrt. Es macht wenig Sinn, zu verhindern, dass das Verhalten nur damit es später in der Prozedur.
@FrédéricHamidi Leider async-Zeug ($.ajax-callbacks, etc.) erlauben default-Verhalten auftreten.
InformationsquelleAutor der Frage Ash | 2011-09-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
NÖ. Sobald die Veranstaltung wurde abgebrochen, er ist abgebrochen.
Können Sie wieder das Ereignis ausgelöst, später aber, mit einem flag, um zu bestimmen, ob Ihre benutzerdefinierte code bereits ausgeführt wurde oder nicht - wie diese (bitte ignorieren die eklatante namespace pollution):
Einer generalisierten Variante (mit dem zusätzlichen Vorteil der Vermeidung der globalen namespace pollution) könnte sein:
Verwendung:
Bonus-super-minimalistische jQuery-plugin, mit
Promise
Unterstützung:Verwendung:
InformationsquelleAutor der Antwort vzwick
Einer neueren version von die akzeptierte Antwort.
Kurze version:
Ein guter use-case für so etwas wie dies ist, wo Sie eventuell einige legacy-form-code, der funktioniert, aber du hast gebeten worden, zur Verbesserung der form durch Zugabe von so etwas wie E-Mail-Adresse Validierung vor dem Absenden des Formulars. Statt Graben durch die back-end-post-code, den Sie schreiben, könnte eine API und dann aktualisieren Sie Ihre front-end-code, auf, API zuerst, bevor Sie sich von der form zu tun, es ist die traditionelle POST.
Zu tun, können Sie code implementieren, ähnlich zu dem, was ich hier geschrieben habe:
InformationsquelleAutor der Antwort Cory Danielson
Können Sie etwas tun, wie
InformationsquelleAutor der Antwort Rafael Oliveira
Überschreiben die Eigenschaft
isDefaultPrevented
wie diese:IMHO, das ist den meisten komplett Weg, verlängern die Veranstaltung mit den genau gleichen Daten.
InformationsquelleAutor der Antwort Tomislav Simić
Ist es möglich, zu verwenden
currentTarget
desevent
.Das Beispiel zeigt, wie gehen Sie mit dem Formular Absenden. Ebenso konnte man die Funktion von
onclick
Attribut usw.InformationsquelleAutor der Antwort Salvis Blūzma
Einfach nicht durchführen
e.preventDefault();
oder führen Sie es unter VORBEHALT.Werden Sie sicherlich nicht ändern können wenn das ursprüngliche Ereignis Aktion tritt.
Wenn Sie auf "neu" original UI-Veranstaltung einige Zeit später (sagen wir, in den callback für einen AJAX-request), dann müssen Sie sich nur noch fake es eine andere Möglichkeit (wie in vzwick Antwort)... obwohl ich die Frage der Brauchbarkeit eines solchen Ansatzes.
InformationsquelleAutor der Antwort Lightness Races in Orbit
Den Ansatz, den ich benutze, ist dieses:
InformationsquelleAutor der Antwort Hokusai
solange "viele Sachen" nicht etwas asynchron-das ist absolut unnötig - die Veranstaltung wird bei Aufruf jeder hf, der auf seine Art in der Reihenfolge, so dass, wenn theres ein onklick-Ereignis in einem parent-element, dieses wird ausgelöst, nachdem die onclik-event hat das Kind vollständig verarbeitet. javascript macht das nicht eine Art von "multithreading" hier, das macht das "stoppen" der event-Verarbeitung notwendig. Fazit: "anhalten" ein event, nur um Sie wieder aufzunehmen, in der gleichen Prozedur nicht machen keinen Sinn.
wenn "viele Sachen" ist etwas asynchron dies auch nicht sinnvoll, da es verhindert, dass die asynchonous Dinge zu tun, was Sie tun sollten (asynchonous Zeug) und machen Sie bahave ist wie alles in der Reihenfolge (wo kommen wir zurück zu meinem ersten Absatz)
InformationsquelleAutor der Antwort oezi
Andere Lösung ist die Verwendung von Fenster.setTimeout in der Ereignis-listener und den code auszuführen, nachdem das Ereignis abgeschlossen hat. So etwas wie...
InformationsquelleAutor der Antwort Αλέκος
Die akzeptierte Lösung wird nicht funktionieren bei der Arbeit mit einem anchor-tag. In diesem Fall werden Sie nicht in der Lage, klicken Sie erneut auf den link nach dem aufrufen
e.preventDefault()
. Das ist, weil die click-Ereignis, generiert von jQuery ist einfach Schicht auf der Oberseite der native browser-events. So das auslösen einer "click" - Ereignis auf ein Anker-tag nicht dem link Folgen. Stattdessen könntest du eine Bibliothek wie jquery-simulieren, die Ihnen erlauben, starten Sie native browser-events.Mehr details zu diesem Thema finden Sie in diesem link
InformationsquelleAutor der Antwort Miguel Carvajal
Ich weiß, das Thema ist alt, aber ich denke, dass ich dazu beitragen kann. Sie auslösen können das Standardverhalten eines Ereignisses auf ein bestimmtes element jeder Zeit in Ihrer handler-Funktion, wenn Sie bereits wissen, dass das Verhalten. Zum Beispiel, wenn Sie auslösen des click-Ereignisses auf die reset-Taste, die Sie eigentlich aufrufen der reset-Funktion auf die nächste form als das Standard-Verhalten. In der handler-Funktion, nachdem Sie mit der preventDefault-Funktion, können Sie rufen Sie die Standard-Verhalten durch aufrufen der reset-Funktion auf das engste form überall in Ihrer handler-code.
InformationsquelleAutor der Antwort Patrik