Zum Umschalten klicken Sie auf Handler in Javascript
Ich habe eine HTML-Schaltfläche, auf die lege ich ein Ereignis, mit jQuery ist bind()
:
$('#mybutton').bind('click', myFirstHandlerFunction);
In myFirstHandlerFunction
möchte ich diesen handler zu ersetzen, selbst mit einer neuen hf mySecondHandlerFunction
wie diese:
function myFirstHandlerFunction(e) {
$(this).unbind('click', myFirstHandlerFunction).bind('click', mySecondHandlerFunction);
}
In der zweiten click-handler, mySecondHandlerFunction
möchte ich wählen Sie mit der Taste wieder in den ursprünglichen Zustand: Bindung die mySecondHandlerFunction
handler und befestigen Sie den original-handlermyFirstHandlerFunction
:
function mySecondHandlerFunction(e) {
$(this).unbind('click', mySecondHandlerFunction).bind('click', myFirstHandlerFunction);
}
Dies funktioniert gut, außer ein kleines detail: da das click-Ereignis nicht noch vermehrt durch die einzelnen button-Klick-Handler des click-Ereignisses übergeben wird, auf die Schaltfläche weiter klicken Sie auf handler,, die passiert werden die handler, war nur gebunden in der vorherigen Prozedur. Das Ergebnis ist mySecondHandlerFunction
wird sofort ausgeführt, nachdem myFirstHandlerFunction
ausgeführt wird.
Dieses problem kann leicht gelöst werden, durch aufrufen e.stopPropagation()
in jeder Hundeführer, aber das hat den negativen Nebeneffekt, stornieren Sie alle anderen click-Handler, eventuell angebracht wurden, unabhängig voneinander.
Gibt es einen Weg, um sicher und konsequent Umschalten zwischen zwei click-Handler, ohne zu stoppen die Ausbreitung der click-Ereignis?
InformationsquelleAutor Nathan Friend | 2013-01-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sieht es aus wie toggle() würde Ihr problem lösen:
Den obigen code wird die Registrierung
myFirstHandlerFunction
undmySecondHandlerFunction
genannt zu werden, auf Alternative Klicks.Die .toggle(Event) war abgeschrieben in jQuery 1.8 und entfernt 1.9+. Dies ist nicht mehr eine praktikable option. -Quelle
getan, vielen Dank für das heads-up.
InformationsquelleAutor Frédéric Hamidi
Einfach ein boolean schaltet die Funktionalität des handlers, es gibt keine Notwendigkeit, zu jonglieren, die hf-hören:
.toggle
ist wahrscheinlich besser, aber +1 für die Logik zeigt auf, wie dies zu tun, ohne die Verwendung von.toggle
So kommentierte oben
toggle
ist veraltet in 1.9 entfernt und in 1.10. Verwenden Sie es nicht.Ich mag dieses besser mit data-Attribut statt global : stackoverflow.com/a/2459225/781695
InformationsquelleAutor Cerbrus
Ich schaute auf das heute, und klar, es gab noch nicht einen Weg, dies zu tun, ohne eine Globale variable aufgeführt. Ich kam mit der folgenden Adressen hinzufügen, um eine ESRI-basemap, aber es würde funktionieren in der Regel auch:
Dies sollte Ihnen ermöglichen, setzen etwas anderes in dem Abschnitt, wo Sie überschreibt den click-handler, und es nicht nötig eine Globale variable.
InformationsquelleAutor BBQ Singular
Dies würde helfen, hinzufügen von Daten-click-state-Attribut auf Ihre Schaltfläche
InformationsquelleAutor Mike Tavish
Wie diese:
Der downvote ist nicht von mir, aber kann es im Zusammenhang mit
handler
Globale statt lokale, oder die Nutzung von0
und1
statt einem boolean, oder auf die Tatsache, dass der aktuelle Wert vonthis
ist nicht richtig an den Handler.Danke Mann...
InformationsquelleAutor ATOzTOA