jQuery live('click') feuern für rechts-klicken Sie auf
Habe ich bemerkt ein seltsames Verhalten der live()
Funktion in jQuery:
<a href="#" id="normal">normal</a>
<a href="#" id="live">live</a>
$('#normal').click(clickHandler);
$('#live').live('click', clickHandler);
function clickHandler() {
alert("Clicked");
return false;
}
Das ist fein und dandy, bis Sie mit der rechten Maustaste klicken Sie auf den "live" - link und es ausgelöst wird, der handler, und dann nicht zeigen, das Kontext-Menü. Die event-handler nicht ausgelöst haben (wie erwartet) auf den "normalen" link.
Habe ich in der Lage, das zu umgehen, durch ändern der handler dies:
function clickHandler(e) {
if (e.button != 0) return true;
//normal handler code here
return false;
}
Aber das ist wirklich ärgerlich, müssen wir hinzufügen, dass alle event-Handler. Gibt es eine bessere Möglichkeit zu haben, den event-Handler nur Feuer, wie die normalen Klick-Handler?
- Wie stellen Sie eine Frage in die Zukunft?
- Ich war gespannt zu sehen, Ihre workaround hier, und prompt versucht, dies auf meine eigene app, und zwar die links, ich bin rechts-Klick auf jetzt gefangen werden können, und ignoriert, ich bin immer noch nicht zu sehen, meine rechten Maustaste Kontext-Menü auf diese. Auch meine mittlere Maustaste klicken (öffnet sich in einem neuen tab) funktioniert auch nicht. Aber zumindest die Prozedur kann zurückkehren zu früh!
- Eigentlich, so scheint es, wenn ich mit der rechten Maustaste klicken Sie auf wiederholt, schnell, ich kann gelegentlich erhalten Sie das Kontext-Menü erscheinen.... Hmmm.
- es scheint wie eine Doppel-rechts-Klick-ist das, was immer wieder ein Kontext-Menü bei mir in Firefox bei der Verwendung von
live
auf die klicken Sie...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist ein bekanntes Problem:
Dein workaround ist das beste was Sie jetzt tun können. Es scheint nur auf Firefox (ich glaube, es ist tatsächlich ein bug im Firefox, nicht jQuery per se).
Siehe auch diese Frage fragte gestern.
Ich eine Lösung gefunden habe - "reparieren" die das
live()
code selbst.In der unminified Quelle von jQuery 1.3.2 um die Zeile 2989 gibt es eine Funktion namens
liveHandler()
. Ändern Sie den code zum hinzufügen einer Zeile:Dies wird stop-die click-Ereignisse von feuern auf alles, aber die linke Maustaste. Wenn Sie vor allem wollte, könnte man ganz einfach ändern Sie den code zu ermöglichen "Rechtsklick" - events auch, aber das funktioniert für mich es ist also auch übernachten.
Können Sie umschreiben es so:
und nennen es, wenn Sie hinzufügen ein neues dom-element ist, sollten Sie das erwartete Ergebnis (kein brennen auf der rechten Seite klicken Sie auf Ereignis).
live()
nicht wahr?Dies ist eine unglückliche Konsequenz wie
live
umgesetzt wird. Es ist eigentlich verwendet, Ereignis-bubbling " du bist also nicht die Bindung an das anchor-element click-Ereignis, sind Sie verbindlich auf das Dokument klicken-Ereignis.Ich löste dies durch verwenden des mousedown-Ereignisses. In meiner situation die Unterscheidung zwischen den Ereignissen mousedown und klicken Sie auf egal.