Klicken Sie handler von element in JQuery
Wie bekomme ich eine Referenz auf den click-handler an ein element in JQuery?
Hier ist, was ich versuche zu tun:
Speichern der click-handler,
Ändern Sie den click-handler für den nächsten Klick
Wiederherstellen der ursprünglichen click-handler
var originalClick = $(settings.currentTarget).click;
$(settings.currentTarget).off("click");
$(settings.currentTarget).click(function (e) {
e.preventDefault();
settings.model.modal.close();
$(settings.currentTarget).off("click");
$(settings.currentTarget).click(originalClick);
});
Der obige code funktioniert die erste Zeit, aber wenn ich auf das element erneut fehlschlägt:
Uncaught TypeError: Object [object HTMLAnchorElement] has no method 'on'
Update:
Ich merke jetzt, dass dies ist ein wirklich schlechtes design, die ich versuche zu tun. Ich habe dieses Problem behoben, indem die Aufrechterhaltung einer Sichtbarkeit boolean in meinem viewmodel, wenn es wahr ist, nicht re-öffnen Sie den modal.
$(settings.currentTarget).click
ist die Funktion, die Sie verbindlich sind die event-handler mit. Es ist nicht die event-handler selbst. Wie war das original-event-handler gebunden? Mit jQuery oder andere Weise?- original click-handler gebunden war, mit Knock-out.
- Dieser könnte in der Lage sein, zu helfen: stackoverflow.com/questions/2518421/...
- So verwendet Sie eine
click
verbindlich? Ich weiß nicht, wie es intern arbeitet, aber ich nehme an, knockout ist mitaddEventListener
. Es gibt keinen Weg, um eine Referenz auf Handler gebunden diese Weise. - Ich denke, Sie bekommen diese Nachricht, weil Sie hier aufrufen
$(settings.currentTarget).off("click");
wieder während des auf-und nie genannt .Auf ersten. Es sieht aus wie es schon war .aus, wie Sie an der Spitze. - sollte das entfernen der Klick-Prozedur in Zeile 4, dann sollte ich das hinzufügen eines neuen click-handler mit der ursprünglichen Funktion.
- ist es trotzdem das zu erreichen, was ich versuche zu tun, wenn knockout verwendet addEventListener?
Du musst angemeldet sein, um einen Kommentar abzugeben.
$(...).click
ist die jQueryclick()
Methode, nicht Ihre event-handler.Können Sie eine undokumentierte interne API, um die Liste der event-Handler:
Was passiert, wenn Sie versuchen, es auf diese Weise?
The off() method removes event handlers that were attached with .on().
Das erste mal, Sie nennen es, Sie nie befestigt es mit .auf (das) erste. Sie könnte sein Vermischung Dinge.settings.currentTarget
? Auch habe ich bemerkt, Sie sagten, Sie waren mit knockout.js. Irgendeinem Grund dieses Teil kann nicht mit jQuery?var originalClick = $(settings.currentTarget).click;
macht keinen Sinn.jQuery.fn.click
ist eine jQuery-Methode, nicht ein event-handler. Sie können binden Sie es als event-handler.