Відповіді:
Як уже згадували інші, праву кнопку миші можна виявити за допомогою звичайних подій миші (mousedown, mouseup, click) . Однак якщо ви шукаєте подію стрільби, коли відображається меню правої кнопки миші, ви шукаєте не в тому місці. Праве клацання / контекстне меню також доступне за допомогою клавіатури (shift + F10 або клавіша контекстного меню в Windows та деяких Linux). У цій ситуації подія, яку ви шукаєте oncontextmenu:
window.oncontextmenu = function ()
{
showCustomMenu();
return false; // cancel default menu
}
Що стосується самих подій миші, браузери встановлюють властивість об'єкту події, який доступний за допомогою функції обробки подій:
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" : "")має бути (isRightMB?"was" : "was not"). Правильно? Будь ласка, допоможіть переглянути його.
onmousedownта onmouseup, але ні onclick. Мабуть, у Chrome onclickвін спрацьовує лише для лівої кнопки миші. (Так , хлопці, я перевірив це кілька разів) для виявлення правої кнопки миші кнопкою миші, ви повинні або об'єднати onmousedownі onmouseup, або використання oncontextmenu.
подивіться на наступний код jQuery:
$("#myId").mousedown(function(ev){
if(ev.which == 3)
{
alert("Right mouse button clicked on element with id myId");
}
});
Значення whichбуде:
.whichне те саме, що .button? Oo .button=> 0,1,2 ; which=> 1,2,3 . це просто неправильно.
Ви можете використовувати подію window.oncontextmenu, наприклад:
window.oncontextmenu = function () {
alert('Right Click')
}
<h1>Please Right Click here!</h1>
window.oncontextmenu = function () { e.preventDefault() }не працювало.
Так, хоча w3c каже, що правою клацанням миші може бути виявлена подія клацання, onClick не спрацьовує за допомогою клацання правою кнопкою миші у звичайних браузерах.
Насправді, тригер правою кнопкою миші лише onMouseDown onMouseUp та onContextMenu.
Таким чином, ви можете вважати "onContextMenu" подією правої кнопки миші. Це стандарт HTML5.0.
Якщо ви хочете виявити клацання правою кнопкою миші, вам не слід використовувати MouseEvent.whichвластивість, оскільки вона нестандартна і серед браузерів є велика несумісність. (див. MDN ) Натомість слід використовувати MouseEvent.button. Він повертає число, що представляє задану кнопку:
0: Головна кнопка натиснута, як правило, ліва кнопка або неініціалізований стан1: Допоміжна кнопка, натиснута, як правило, кнопка колеса або середня кнопка (якщо є)2: Вторинна кнопка натиснута, як правило, права кнопка3: Четверта кнопка, як правило, кнопка Назад браузера4: П'ята кнопка, як правило, кнопка перегляду впередMouseEvent.button обробляє більше типів введення, ніж просто звичайна миша:
Кнопки можуть бути налаштовані інакше, ніж стандартний макет "зліва направо". Миша, налаштована для використання лівою рукою, може змінити дії кнопок. Деякі вказівні пристрої мають лише одну кнопку та використовують клавіатуру чи інші механізми введення для позначення головної, вторинної, допоміжної тощо. Інші можуть мати багато кнопок, відображених на різні функції та значення кнопок.
Довідка:
Ні, але ви можете виявити, яку кнопку миші використовували в події "onmousedown" ... і звідти визначити, чи було це "клацанням правою кнопкою миші".
onmousedown, onmouseupі onclick. Якщо ви переглядаєте перекриття меню правою кнопкою миші, ці події - це не те, чим слід користуватися (див. Мою відповідь нижче).
У наведеному нижче коді використовується jQuery для генерування власної rightclickподії на основі типових даних mousedownта mouseupподій. Він враховує такі моменти:
contextmenuподія там не запускається)on('contextmenu', ...)пунктами "$(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>
Так!
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)
Так, oncontextmenu - це, мабуть, найкраща альтернатива, але майте на увазі, що він спрацьовує при натисканні миші, тоді як натискання буде спрацьовувати на миші вгору.
Інші пов'язані питання задавали питання про подвійне клацання правою кнопкою миші, що, очевидно, не підтримується, за винятком ручної перевірки таймера. Однією з причин, за якою ви можете мати можливість подвійного клацання правою кнопкою миші, є те, якщо вам потрібно / хочете підтримати введення лівої миші (обернення кнопки). Реалізація браузера, здається, робить багато припущень щодо того, як ми повинні використовувати доступні пристрої введення.
Найпростіший спосіб зробити правий клацання - це використання
$('classx').on('contextmenu', function (event) {
});
Однак це не перехресне рішення браузера, браузери поводяться по-різному до цієї події, особливо Firefox та IE. Я б рекомендував нижче для крос-браузерного рішення
$('classx').on('mousedown', function (event) {
var keycode = ( event.keyCode ? event.keyCode : event.which );
if (keycode === 3) {
//your right click code goes here
}
});
Це найпростіший спосіб запустити його, і він працює у всіх браузерах, крім веб-переглядів додатків, таких як (CefSharp Chromium тощо). Сподіваюся, мій код допоможе вам і удачі!
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>
Якщо ви хочете викликати функцію під час події правою кнопкою миші, ми можемо скористатися наступним
<html lang="en" oncontextmenu="func(); return false;">
</html>
<script>
function func(){
alert("Yes");
}
</script>
Спробуйте скористатися властивістю whichта / абоbutton
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);
Деякі відомості тут

Для обробки правої кнопки миші можна скористатися подією "oncontextmenu". Нижче наведено приклад:
document.body.oncontextmenu=function(event) {
alert(" Right click! ");
};
наведений вище код повідомляє про деякий текст при натисканні правої кнопки миші. Якщо ви не хочете, щоб меню браузера за замовчуванням з’являлося, ви можете додати false false; В кінці змісту функції. Дякую.
Так, це подія, встановлене в JavaScript. Існує JQuery плагін теж , щоб зробити це