JQuery Toggle-Aufrufe verhindern standardmäßig DefefDefault (), sodass die Standardeinstellungen nicht funktionieren. Sie können nicht auf ein Kontrollkästchen klicken, Sie können nicht auf einen Link klicken usw. usw.
Ist es möglich, den Standardhandler wiederherzustellen?
javascript
jquery
events
preventdefault
event-bubbling
Stijn de Witt
quelle
quelle
preventDefault
nachdem er aufgerufen wurde. Derzeit lautet diese Frage: "Wie kann ich einen Ereignis-Listener mit jQuery aufheben?".Antworten:
In meinem Fall:
$('#some_link').unbind('click');
arbeitete als einzige Methode, um die Standardaktion wiederherzustellen.Wie hier zu sehen: https://stackoverflow.com/a/1673570/211514
quelle
Es ist ziemlich einfach
Nehmen wir an, Sie machen so etwas
Um die ursprüngliche Situation wiederherzustellen, gehen Sie wie folgt vor ...
Von dieser Website .
quelle
Es ist nicht möglich, ein wiederherzustellen,
preventDefault()
aber Sie können es austricksen :)Wenn Sie noch einen Schritt weiter gehen möchten, können Sie sogar die Auslösetaste verwenden, um ein Ereignis auszulösen.
quelle
quelle
In einigen Fällen * können Sie zunächst
return false
statte.preventDefault()
, dann, wenn Sie die Standardeinstellung wiederherstellen möchtenreturn true
.* Das heißt, wenn es Ihnen nichts ausmacht, dass das Ereignis sprudelt, und Sie das nicht
e.stopPropagation()
zusammen mit verwendene.preventDefault()
Siehe auch ähnliche Frage (auch im Stapelüberlauf)
oder im Falle eines Kontrollkästchens können Sie Folgendes haben:
quelle
Sie können die Standardaktion wiederherstellen (wenn es sich um eine HREF-Aktion handelt), indem Sie folgende Schritte ausführen:
window.location = $(this).attr('href');
quelle
Wenn es ein Link ist, dann
$(this).unbind("click");
, wird das Klicken auf den Link wieder aktiviert und das Standardverhalten wird wiederhergestellt.Ich habe eine Demo-JS-Geige erstellt , um zu demonstrieren, wie dies funktioniert:
Hier ist der Code der JS-Geige:
HTML:
Javascript:
quelle
Testen Sie diesen Code, ich denke, lösen Sie Ihr Problem:
Referenz
quelle
Der beste Weg, dies zu tun, indem Sie einen Namespace verwenden. Es ist ein sicherer Weg. Hier ist .rb der Namespace, der sicherstellt, dass die Aufhebungsfunktion für diesen bestimmten Keydown funktioniert, nicht jedoch für andere.
ref1: http://idodev.co.uk/2014/01/safely-binding-to-events-using-namespaces-in-jquery/
ref2: http://jqfundamentals.com/chapter/events
quelle
Deaktivieren:
Aktivieren:
quelle
Die PreventDefault () -Methode der Ereignisschnittstelle teilt dem Benutzeragenten mit, dass die Standardaktion nicht wie gewohnt ausgeführt werden sollte, wenn das Ereignis nicht explizit behandelt wird. Das Ereignis wird wie gewohnt fortgesetzt, es sei denn, einer seiner Ereignis-Listener ruft stopPropagation () oder stopImmediatePropagation () auf, wobei beide die Weitergabe sofort beenden.
Durch Aufrufen von präventDefault () in einer beliebigen Phase des Ereignisflusses wird das Ereignis abgebrochen. Dies bedeutet, dass keine Standardaktion ausgeführt wird, die normalerweise von der Implementierung als Ergebnis des Ereignisses ausgeführt wird.
Mit Event.cancelable können Sie überprüfen, ob das Ereignis abgebrochen werden kann. Das Aufrufen von prepareDefault () für ein nicht abbrechbares Ereignis hat keine Auswirkung.
quelle
Ich hatte ein Problem, bei dem ich die Standardaktion erst nach Abschluss einer benutzerdefinierten Aktion (ansonsten deaktivierte Eingabefelder in einem Formular aktivieren) benötigte. Ich habe die Standardaktion (submit ()) in eine eigene rekursive Funktion (dosubmit ()) eingeschlossen.
quelle
if (predef == true)
sind, dass dies expliziter ist, fügen Sie Ihrem JS-Code ohne Grund 7 Zeichen hinzu.if (prevdef)
ist genauso lesbar. Außerdem haben Sie einen redundanten anonymen Ereignishandler hinzugefügt, wenn.click(dosubmit)
dasselbe getan wird,.click(function(){dosubmit()})
als würden keine Parameter übergeben.Verwenden Sie einen Booleschen Wert:
Ich verwende dies in einer Progressive Web App, um das Scrollen / Zoomen auf einigen "Seiten" zu verhindern, während andere zugelassen werden.
quelle
Sie können 2 Klassen bilden. Nachdem Sie Ihr JS-Skript auf eines davon festgelegt haben und Ihr Skript deaktivieren möchten, löschen Sie einfach die Klasse mit gebundenem Skript aus diesem Formular.
HTML:
JS
quelle
quelle
Ich bin mir nicht sicher, ob Sie das meinen, was Sie meinen. Aber hier ist eine Lösung für ein ähnliches (und möglicherweise dasselbe) Problem ...
Ich benutze häufig präventDefault (), um Elemente abzufangen. Allerdings: Es ist nicht die einzige Methode zum Abfangen. Oft möchten Sie nur eine "Frage", nach der das Verhalten wie zuvor fortgesetzt oder gestoppt wird. In einem kürzlich durchgeführten Fall habe ich die folgende Lösung verwendet:
$("#content").on('click', '#replace', (function(event){ return confirm('Are you sure you want to do that?') }));
Grundsätzlich soll das "Standard verhindern" etwas anderes abfangen und tun: Das "Bestätigen" ist für die Verwendung in ... gut - Bestätigen!
quelle