jQuery: preventDefault () funktioniert nicht bei Eingabe- / Klickereignissen?

8

Ich möchte das standardmäßige contextMenu deaktivieren, wenn ein Benutzer mit der rechten Maustaste auf ein Eingabefeld klickt, damit ich ein benutzerdefiniertes contextMenu anzeigen kann. Im Allgemeinen ist es ziemlich einfach, das Kontextmenü zu deaktivieren, indem man so etwas wie folgt macht:

%Vor%

Und tatsächlich kann ich das auf fast jedem Element tun, AUSSER für Eingabefelder in FF - wer weiß warum oder könnte er mich auf eine Dokumentation hinweisen?

Hier ist der relevante Code, mit dem ich arbeite, danke Jungs.

HTML:

%Vor%

JS:

%Vor%

BEARBEITEN:

Entschuldigung, nach dem Lesen der Kommentare merke ich, dass ich ein paar Dinge klären sollte.

1) Der obige Code funktioniert ... in gewissem Sinne. Der Code ist in der Lage zu sortieren, welche Schaltfläche angeklickt wurde, es ist einfach egal, dass ich e.preventDefault () sage und das Kontextmenü erscheint immer noch. Mit anderen Worten, wenn Sie einen Alarm auf e.button setzen, erhalten Sie Ihre 1 oder 0 für links und 2 für rechts ... aber es lacht mich nur an und zeigt immer noch das verdammte Standardmenü!

2) Wenn ich den jQuery-Selektor auf ein beliebiges anderes Element (außer Eingabe) setze, funktioniert alles. FF wird den preventDefault () -Aufruf respektieren und das Standard-Rechtsklick-Menü wird nicht angezeigt.

    
Jason 29.04.2010, 18:01
quelle

3 Antworten

3

Tut mir leid, Leute, ich weiß, dass dies eine "Antwort" ist, weil ich nie herausgefunden habe, warum Webkit-Browser es nicht mögen, dass Sie mit Eingabefeldereignissen herumalbern, aber was auch immer, das funktioniert. Die Lösung besteht also darin, den Listener auf das gesamte Fenster anzuwenden und dann zu fragen, ob das Ziel die Klasse hat, auf die der Effekt angewendet werden soll ... und von dort aus weitergeht. Um ehrlich zu sein, ist dies wahrscheinlich eine bessere Lösung, da ich für meine spezielle Anwendung diese Funktionalität auf jedes beliebige Element anwenden kann.

%Vor%     
Jason 13.05.2010, 16:56
quelle
11

Eine browserübergreifende Lösung zum Deaktivieren des Standardkontextmenüs:

%Vor%

Um das Kontextmenü nur innerhalb eines bestimmten Elements zu erfassen, verwenden Sie:

%Vor%

Je nach Ereignisszenario und Browser erhalten Sie unterschiedliche Ergebnisse, wenn Sie andere Methoden als oncontextmenu zum Unterbrechen eines Rechtsklick-Ereignisses verwenden.

In jQuery:

%Vor%

Sie können auch jQuerys event.which verwenden, um zu bestimmen, welche Taste gedrückt wurde, aber Sie müssen das Standardkontextmenü-Ereignis immer noch abbrechen:

%Vor%

Ich habe das in IE6 (unter Wine), Chrome 11, Firefox 3.6, Opera 11 und Safari getestet.

    
Wayne 09.06.2011 01:09
quelle
0

Ich habe gerade in Firefox 3.6 getestet und es geht in die erste if-Anweisung, also wird e.preventDefault () nie aufgerufen.

%Vor%     
scott 29.04.2010 18:41
quelle