kann Sie binden .klicken Sie auf (), so dass es feuert vor onclick?
Schreibe ich jQuery für eine app zu bauen, die in JSF. Die JSF-Komponenten verwenden eine Menge Ihrer eigenen JS für das tun, was JSF tut und Sie verwenden eine Menge von onclick-Attribute, um Sie alle behandeln.
Gibt es gültige/richtige Weg, um binden Sie Ihr eigenes click-Ereignis auf ein element und sorgen dafür, dass Ihr event feuert vor die Standard-onclick-Ereignis? Es scheint, dass standardmäßig ein jQuery-Klick-Funktion ausgelöst wird, nachdem alle inline-onclick-Funktion aufruft.
- Sie können das nicht tun, es sei denn, die inline-onclick-Attribute werden entfernt das element.
- Wenn Sie die jquery-Funktion .klicken Sie auf() auf $(document).ready () - rufen Sie Ihre eigene Funktion. Frage ich mich oft, wie kann jquery zu tun.
- ich hatte den Eindruck, dass die jQuery-events werden ausgelöst, bevor das default-event, sonst event.preventDefault nie funktionieren würde. ich würde versuchen, auf den Dokument bereit, kopieren Sie den jsf .klicken Sie auf Veranstaltungen präsent sind, lösen Sie, binden Sie Ihre click-Ereignis, und fügen Sie den jsf .klicken Sie auf Ereignisse zurück durch jQuery. Ich habe keine Möglichkeit zu testen, dass für Sie zwar.
Du musst angemeldet sein, um einen Kommentar abzugeben.
In jQuery Ereignisse ausgelöst werden streng in der Reihenfolge, in der Sie registriert wurden.
Können Sie umgehen inline-DOM0
onclick
Stil-Handler durch Iteration über den ganzen DOM, entfernen dieseonclick
Eigenschaften, und dann registrieren Sie Ihre eigene handler, die dann ruft die ursprünglich definierte Funktion.Etwas wie:
Sehen http://jsfiddle.net/alnitak/2SCTK/
So registrieren Sie Ihre eigenen Handler zuerst jQuery, dann rufen Sie den obigen code zum entfernen der ursprünglichen inline -
onclick
Handler und re-registrieren Sie, als ob jQuery, hatte Sie Hinzugefügt.BEARBEITEN code vereinfacht, nur die original-Funktion - jQuery wird sichergestellt, dass die Funktion aufgerufen wird, mit der rechten Zusammenhang. Vorherigen code, der explizit den Zusammenhang zu
window
war falsch.if (!r) {ev.preventDefault();}
. Dies verhindert, dass die default-Aktion, wenn das original liefert ein "falsy" Wert (0, undefined, false, etc.). Ich schlage vor, Sie nurreturn orig.call(window);
statt. Ich habe ein paar tests und es scheint, Rückgabe von false durch eine DOM0 Ereignis und aus eineraddEventListener
das gleiche handeln.if (r === false)
. Gerade zurückfalse
scheinen die arbeiten in Chrome, ich habe nicht versucht, andere Browser noch nicht. Ich bin mir sicher, dass ich ' ve hatte Probleme in der Vergangenheit, wenn die Rückgabe false ist nicht zu stoppen alle Standard-Verhalten.return false
imaddEventListener()
ist nicht das gleiche wie es zu tun in ein jQuery -.click()
hf - offenbar jQuery maps diereturn false
zu einer event-Absage selbst. mail-archive.com/[email protected]/msg71371.html, so habe ich aktualisiert, der code.Function.call()
zum festlegen des Kontexts.Können Sie entfernen Sie die
onClick
Ereignis aus dem DOM-element, und dann binden Sie es mit jQuery.Veranstaltungen sind aufgerufen, in der Reihenfolge, wie Sie sind gebunden, so dass der einzige Weg, um die Funktion aufrufen zunächst ist zu lösen und dann binden Sie die ursprüngliche Funktion.
Demo: http://jsfiddle.net/wYd5t/2/
onclick
DOM0-Stil-handler verhindert sprudelt, oder die Ausbreitung (D. H.return false
) im Vergleich zuaddEventListener()
Stil-Handler?return false
). jsfiddle.net/wYd5t/1return cb.call(...)
überhaupt, geben Sie nur die Funktion zu.click
wie Sie es in Ihrer Antwort.Gibt es keine Möglichkeit, das Mandat Ereignis auslösen, um für den gleichen listener auf das gleiche element.
Jeder browser ist kostenlos, um das Feuer der Ereignisse in beliebiger Reihenfolge er wählt.
.bind
: "Wenn es mehrere Handler registriert werden, Sie werden immer in der Reihenfolge ausgeführt, in der Sie gebunden waren." api.jquery.com/bindKönnten Sie
onmousedown
auf das element.click
ein element, das nicht mit der Maus.