Antworten:
Wie bereits erwähnt, kann die rechte Maustaste durch die üblichen Mausereignisse (Mousedown, Mouseup, Klick) erkannt werden . Wenn Sie jedoch nach einem Auslöseereignis suchen, wenn das Kontextmenü angezeigt wird, suchen Sie an der falschen Stelle. Das Rechtsklick- / Kontextmenü ist auch über die Tastatur zugänglich (Umschalt + F10 oder Kontextmenütaste unter Windows und einigen Linux-Versionen). In dieser Situation suchen Sie nach oncontextmenu:
window.oncontextmenu = function ()
{
showCustomMenu();
return false; // cancel default menu
}
Für die Mausereignisse selbst legen Browser eine Eigenschaft für das Ereignisobjekt fest, auf die über die Ereignisbehandlungsfunktion zugegriffen werden kann:
document.body.onclick = function (e) {
var isRightMB;
e = e || window.event;
if ("which" in e) // Gecko (Firefox), WebKit (Safari/Chrome) & Opera
isRightMB = e.which == 3;
else if ("button" in e) // IE, Opera
isRightMB = e.button == 2;
alert("Right mouse button " + (isRightMB ? "" : " was not") + "clicked!");
}
(isRightMB?"was not" : "")sollte sein (isRightMB?"was" : "was not"). Richtig ? Bitte helfen Sie bei der Überprüfung.
onmousedownund onmouseup, aber nicht onclick. Anscheinend wird in Chrome onclicknur die linke Maustaste ausgelöst. (und ja Leute, ich habe das mehrmals getestet) Um einen Rechtsklick zu erkennen, müssen Sie entweder kombinieren onmousedownund onmouseupoder verwenden oncontextmenu.
Schauen Sie sich den folgenden jQuery-Code an:
$("#myId").mousedown(function(ev){
if(ev.which == 3)
{
alert("Right mouse button clicked on element with id myId");
}
});
Der Wert von whichwird sein:
.whichnicht dasselbe wie .button? Oo .button=> 0,1,2 ; which=> 1,2,3 . das ist einfach falsch
Sie können das Ereignis window.oncontextmenubeispielsweise verwenden:
window.oncontextmenu = function () {
alert('Right Click')
}
<h1>Please Right Click here!</h1>
window.oncontextmenu = function () { e.preventDefault() }hat nicht funktioniert.
Ja, obwohl w3c sagt, dass der Rechtsklick durch das Klickereignis erkannt werden kann, wird onClick in normalen Browsern nicht durch Rechtsklick ausgelöst.
Tatsächlich lösen Sie mit der rechten Maustaste nur onMouseDown onMouseUp und onContextMenu aus.
Daher können Sie "onContextMenu" als Rechtsklickereignis betrachten. Es ist ein HTML5.0-Standard.
Wenn Sie einen Rechtsklick erkennen möchten, sollten Sie keine MouseEvent.whichEigenschaft verwenden, da diese nicht dem Standard entspricht und die Browser inkompatibel sind. (siehe MDN ) Sie sollten stattdessen verwenden MouseEvent.button. Es wird eine Zahl zurückgegeben, die eine bestimmte Schaltfläche darstellt:
0: Haupttaste gedrückt, normalerweise die linke Taste oder der nicht initialisierte Zustand1: Hilfstaste gedrückt, normalerweise die Radtaste oder die mittlere Taste (falls vorhanden)2: Sekundäre Taste gedrückt, normalerweise die rechte Taste3: Vierte Schaltfläche, normalerweise die Schaltfläche "Browser zurück"4: Fünfte Schaltfläche, normalerweise die Schaltfläche Browser-WeiterleitungMouseEvent.button verarbeitet mehr Eingabetypen als nur Standardmaus:
Die Schaltflächen können anders konfiguriert sein als das Standardlayout "von links nach rechts". Bei einer für Linkshänder konfigurierten Maus können die Tastenaktionen umgekehrt werden. Einige Zeigegeräte haben nur eine Taste und verwenden eine Tastatur oder andere Eingabemechanismen, um Haupt-, Neben-, Hilfs- usw. anzuzeigen. Andere haben möglicherweise viele Tasten, die unterschiedlichen Funktionen und Tastenwerten zugeordnet sind.
Referenz:
Nein, aber Sie können erkennen, welche Maustaste im Ereignis "onmousedown" verwendet wurde ... und von dort aus feststellen, ob es sich um einen "Rechtsklick" handelt.
onmousedown, onmouseupund onclick. Wenn Sie das Kontextmenü überschreiben möchten, sollten Sie diese Ereignisse jedoch nicht verwenden (siehe meine Antwort unten).
Der folgende Code verwendet jQuery, um ein benutzerdefiniertes rightclickEreignis basierend auf dem Standard mousedownund den mouseupEreignissen zu generieren . Dabei werden folgende Punkte berücksichtigt:
contextmenuEreignis dort nicht ausgelöst wird)on('contextmenu', ...)tut$(function ()
{ // global rightclick handler - trigger custom event "rightclick"
var mouseDownElements = [];
$(document).on('mousedown', '*', function(event)
{
if (event.which == 3)
{
mouseDownElements.push(this);
}
});
$(document).on('mouseup', '*', function(event)
{
if (event.which == 3 && mouseDownElements.indexOf(this) >= 0)
{
$(this).trigger('rightclick');
}
});
$(document).on('mouseup', function()
{
mouseDownElements.length = 0;
});
// disable contextmenu
$(document).on('contextmenu', function(event)
{
event.preventDefault();
});
});
// Usage:
$('#testButton').on('rightclick', function(event)
{
alert('this was a rightclick');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="testButton">Rightclick me</button>
Ja, so ist es!
function doSomething(e) {
var rightclick;
if (!e) var e = window.event;
if (e.which) rightclick = (e.which == 3);
else if (e.button) rightclick = (e.button == 2);
alert('Rightclick: ' + rightclick); // true or false
}
elem.addEventListener("click", doSomething)
Ja, das Kontextmenü ist wahrscheinlich die beste Alternative. Beachten Sie jedoch, dass es mit der Maus nach unten ausgelöst wird, während das Klicken mit der Maus nach oben ausgelöst wird.
Andere verwandte Fragen betrafen das Doppelklicken mit der rechten Maustaste - was anscheinend nur durch manuelle Timerprüfung unterstützt wird. Ein Grund, warum Sie möglicherweise einen Doppelklick mit der rechten Maustaste wünschen, ist, wenn Sie die Eingabe mit der linken Hand benötigen (Tastenumkehr). Die Browser-Implementierungen scheinen viele Annahmen darüber zu treffen, wie wir die verfügbaren Eingabegeräte verwenden sollten.
Der einfachste Weg, um mit der rechten Maustaste zu klicken, ist die Verwendung
$('classx').on('contextmenu', function (event) {
});
Dies ist jedoch keine browserübergreifende Lösung. Browser verhalten sich für dieses Ereignis unterschiedlich, insbesondere Firefox und IE. Ich würde unten für eine Cross-Browser-Lösung empfehlen
$('classx').on('mousedown', function (event) {
var keycode = ( event.keyCode ? event.keyCode : event.which );
if (keycode === 3) {
//your right click code goes here
}
});
Dies ist der einfachste Weg, um es auszulösen, und es funktioniert in allen Browsern mit Ausnahme von Anwendungs-Webviews wie (CefSharp Chromium usw.). Ich hoffe mein Code hilft dir und viel Glück!
const contentToRightClick=document.querySelector("div#contentToRightClick");
//const contentToRightClick=window; //If you want to add it into the whole document
contentToRightClick.oncontextmenu=function(e){
e=(e||window.event);
e.preventDefault();
console.log(e);
return false; //Remove it if you want to keep the default contextmenu
}
div#contentToRightClick{
background-color: #eee;
border: 1px solid rgba(0,0,0,.2);
overflow: hidden;
padding: 20px;
height: 150px;
}
<div id="contentToRightClick">Right click on the box !</div>
window.oncontextmenu = function (e) {
e.preventDefault()
alert('Right Click')
}
<h1>Please Right Click here!</h1>
Wenn Sie die Funktion aufrufen möchten, während Sie mit der rechten Maustaste auf ein Ereignis klicken, können Sie Folgendes verwenden
<html lang="en" oncontextmenu="func(); return false;">
</html>
<script>
function func(){
alert("Yes");
}
</script>
Versuchen Sie es mit der Eigenschaft whichund / oderbutton
Die Demo
function onClick(e) {
if (e.which === 1 || e.button === 0) {
console.log('Left mouse button at ' + e.clientX + 'x' + e.clientY);
}
if (e.which === 2 || e.button === 1) {
console.log('Middle mouse button ' + e.clientX + 'x' + e.clientY);
}
if (e.which === 3 || e.button === 2) {
console.log('Right mouse button ' + e.clientX + 'x' + e.clientY);
}
if (e.which === 4 || e.button === 3) {
console.log('Backward mouse button ' + e.clientX + 'x' + e.clientY);
}
if (e.which === 5 || e.button === 4) {
console.log('Forward mouse button ' + e.clientX + 'x' + e.clientY);
}
}
window.addEventListener("mousedown", onClick);
Einige Infos hier

Um mit der rechten Maustaste zu klicken, können Sie das Ereignis 'oncontextmenu' verwenden. Unten ist ein Beispiel:
document.body.oncontextmenu=function(event) {
alert(" Right click! ");
};
Der obige Code warnt Text, wenn Sie mit der rechten Maustaste klicken. Wenn das Standardmenü des Browsers nicht angezeigt werden soll, können Sie return false hinzufügen. Am Ende des Funktionsinhalts. Vielen Dank.
Ja, es ist ein Javascript-Mousedown-Ereignis. Es gibt auch ein jQuery- Plugin, um dies zu tun