2010-03-09 2 views

ответ

123

Как уже упоминалось, правая кнопка мыши может быть обнаружена through the usual mouse events (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!"); 
} 

window.oncontextmenu - MDC

+5

Так же, как с проблемой/button, «oncontextmenu» не реализована одинаково во всех браузерах ... см. Http://www.quirksmode.org/dom/events/contextmenu.html для некоторых из «gotchas», , – smencer

+2

@AndyE Привет, Энди, выражение '(isRightMB?" Не было:: "") 'должно быть' (isRightMB?«было»: «не было»). Правильно ? Пожалуйста, помогите его просмотреть. –

+1

@Joe: смешно, как это было 32 голоса и 4 года без каких-либо замечаний ;-) Я думаю, что меня могут извинить, хотя это было 00:30, когда я написал ответ! –

1

Да - это!

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 
} 
+0

Хорошо - технически это не «событие», но оно может быть использовано. – ChickenMilkBomb

+1

Ваш код совсем не отображается, как кто-то назвал бы это ... –

+0

@TimothyKhouri (и кто-то еще здесь): это совместимая функция прослушивания событий. Вы передали бы сам объект функции в качестве второго аргумента [addEventListener] (https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener), который затем должен был бы _call_ его при появлении указанное событие. Например: 'elem.addEventListener (« click », doSomething)' –

3

Нет, но вы можете обнаружить, что кнопка мыши была использована в «OnMouseDown» событие ... и оттуда определить, если он был «правой кнопкой мыши».

+0

, так что должен щелкнуть правой кнопкой мыши событие onclick? – Brian

+0

Вы правы, это было бы onmousedown. –

+0

@Brian: правый щелчок вызовет 'onmousedown',' onmouseup' и 'onclick'. Однако, если вы ищете переопределение меню с правым щелчком, эти события не то, что вы должны использовать (см. Мой ответ ниже). –

-2

Да, это событие javascript mousedown. Существует также jQuery plugin

19

посмотрит на следующем коде JQuery:

$("#myId").mousedown(function(ev){ 
     if(ev.which == 3) 
     { 
      alert("Right mouse button clicked on element with id myId"); 
     } 
}); 

Значение which будет:

  • для левой кнопки
  • для средней кнопки
  • для правой кнопки
+2

Eeeew, это ужасно! Почему '.which' не то же самое, что' .button'? O.o '.button' => * 0,1,2 *; 'which' => * 1,2,3 *. это просто неправильно. –

4

Я., хотя w3c говорит, что щелчок правой кнопкой мыши может быть обнаружен событием клика, onClick не запускается через правый клик в обычные браузеры.

Фактически, щелкните правой кнопкой мыши только триггер onMouseDown onMouseUp и onContextMenu.

Таким образом, вы можете рассматривать «onContextMenu» как событие правого щелчка. Это стандарт HTML5.0.

+1

Да, звучит как отличное решение, особенно если вы ориентируетесь на новые браузеры. Я не думаю, что это только HTML5.0, потому что даже IE 5.5 поддерживает его на элементах! Подробнее о том, какие браузеры поддерживают его: http://www.quirksmode.org/dom/events/contextmenu.html – Ignas2526

0

Handle событие с использованием библиотеки jQuery

$(window).on("contextmenu", function(e) 
{ 
    alert("Right click"); 
}) 
1

Да, oncontextmenu, вероятно, является лучшей альтернативой, но быть в курсе, что он запускает на мышь вниз, тогда нажмите срабатывает на кнопки мыши.

Другие связанные вопросы задавали вопрос о двойном щелчке правой кнопкой мыши, который, по-видимому, не поддерживается, за исключением ручной проверки таймера. Одна из причин, по которой вы, возможно, захотите иметь двойной щелчок правой кнопкой мыши, - это то, что вам нужно/нужно поддерживать левый вход мыши (смена кнопок). Похоже, что реализации браузеров делают много предположений о том, как мы должны использовать доступные устройства ввода.

5

мой ответ window.oncontextmenu, например:

window.oncontextmenu = function() { 
 
    alert('Right Click') 
 
}
<h1>Please Right Click here!</h1>

2

Следующий код использует JQuery, чтобы генерировать событие пользовательского rightclick на основе умолчанию mousedown и mouseup событий. Рассматриваются следующие вопросы:

  • триггер MouseUp
  • триггер только при нажатии MouseDown на тот же элемент, прежде чем
  • этот код особенно работает в JFX WebView (поскольку contextmenu событие не срабатывает там)
  • это не срабатывает при нажатии клавиши ContextMenu на клавиатуре (например, раствор с on('contextmenu', ...) делает

$(function() 
 
{ // global rightclick handler - trigger custom event "rightclick" 
 
\t var mouseDownElements = []; 
 
\t $(document).on('mousedown', '*', function(event) 
 
\t { 
 
\t \t if (event.which == 3) 
 
\t \t { 
 
\t \t \t mouseDownElements.push(this); 
 
\t \t } 
 
\t }); 
 
\t $(document).on('mouseup', '*', function(event) 
 
\t { 
 
\t \t if (event.which == 3 && mouseDownElements.indexOf(this) >= 0) 
 
\t \t { 
 
\t \t \t $(this).trigger('rightclick'); 
 
\t \t } 
 
\t }); 
 
\t $(document).on('mouseup', function() 
 
\t { 
 
\t \t mouseDownElements.length = 0; 
 
\t }); 
 
    // disable contextmenu 
 
    $(document).on('contextmenu', function(event) 
 
\t { 
 
\t \t event.preventDefault(); 
 
\t }); 
 
}); 
 

 

 

 
// 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>

0

Если Вы хотите вызвать функцию, а правой кнопкой мыши событие означает, что мы можем использовать следующие

<html lang="en" oncontextmenu="func(); return false;"> 
</html> 

<script> 
function func(){ 
alert("Yes"); 
} 
</script> 
-1

Чтобы справиться с правой кнопкой мыши с помощью мыши, вы можете использовать «oncontextmenu» событие. Ниже приведен пример:

document.body.oncontextmenu=function(event) { 
    alert(" Right click! "); 
}; 

Приведенный выше код предупреждает текст при нажатии правой кнопки мыши. Если вы не хотите, чтобы меню по умолчанию браузера отображалось, вы можете добавить return false; В конце содержимого функции. Спасибо.

+0

Вместо того, чтобы просто отвечать ответом на некоторые рамки, ваш ответ был бы более полезен, если бы он содержал ванильный JS а затем, возможно, разработал его, чтобы описать, как проще было бы использовать вашу инфраструктуру. – Xaniff

+0

Хорошо ... Спасибо за рекомендацию .. На самом деле это очень просто с vanilA js too –

0

Самый простой способ получить правой кнопкой мыши сделано, используя

$('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  
    } 
}); 
Смежные вопросы