2010-10-24 7 views
13

Проверьте мой jsfiddle demo, если e.which == 1 тогда, когда вы щелкните левой кнопкой мыши h2 он будет e.which == 2 или e.which == 3 тогда не будет работать. 2 - средняя кнопка мыши, а 3 - правая кнопка мыши. Я тоже нашел это:Jquery: обнаружить, если средний или правой кнопки мыши, если это так, то это:

JQuery предоставляет атрибут e.which, возвращающий 1, 2, 3 для левого, среднего и правого кликов соответственно. Таким образом, вы также можете использовать if (e.which == 3) {alert («правый клик»); }

Этот код не работает:

код:

$("h2").live('click', function(e) { 
    if(e.which == 2) { 
     e.preventDefault(); 
     alert("middle button"); 
    } 
}); 

ответ

23

Возможно, вам захочется уловить событие mousedown, и вам также необходимо предотвратить событие oncontextmenu, чтобы прекратить контекстное меню во время события правого клика.

$("h2").live('mousedown', function(e) { 
    if((e.which == 1)) { 
    alert("left button"); 
    }if((e.which == 3)) { 
    alert("right button"); 
    }else if((e.which == 2)) { 
     alert("middle button"); 
    } 
    e.preventDefault(); 
}).live('contextmenu', function(e){ 
    e.preventDefault(); 
}); 
+0

Да, я обнаружил, что 'contextmenu' был хороший способ, чтобы переопределить встроенный в меню , Но, возможно, ваша первая функция могла бы включать его вместо того, чтобы вставлять его в конец. Я не уверен, почему он использует live, но я бы использовал '.bind ('mousedown contextmenu', function ...' – Mottie

+0

lol! @fudgey Я также понимаю, почему он использовал live, когда он может использовать window.ready и просто приложите его прямо, но я думаю, что у него должны быть свои причины. Но о том, что он делает, он делает любой код, который он ставит в выражении if, выполняется дважды. – burntblark

+0

на самом деле это всего лишь фрагмент кода, который я копировал, поэтому я не знаю, почему я Я использую .live ... ха-ха, хорошо, поэтому я буду работать с тем, что у меня выше, но вы считали, что что-то лучше? И я буду использовать '.bind ('mousedown contextmenu', function' –

2

Я заметил некоторые странности в прошлом с помощью события щелчка для ничего, кроме обычной левой кнопкой мыши. Я не помню подробностей, но если вы измените «щелчок» на «mousedown» или «mouseup», у вас должны быть лучшие результаты.

+0

Вы правы, щелчок мыши не работает, но работает MouseDown для обнаружения средней и правой кнопок – gideon

1

Теперь button был загрязнен до неузнаваемости. Согласно W3C его значения должны быть:

  • Левая кнопка - 0
  • Средняя кнопка - 1
  • Правая кнопка - 2

Согласно Microsoft его значения должны быть:

  • Левая кнопка - 1
  • Средняя кнопка - 4
  • Правая кнопка - 2

Без сомнения, модель Microsoft лучше консорциума W3C. 0 должно означать «никакая кнопка не нажата», все остальное нелогично.

От http://www.quirksmode.org/js/events_properties.html

+0

[jQuery нормализует следующие свойства для совместимости между браузерами: ... 'which'] (http://api.jquery.com/category/events/event-object/). Лучше использовать 'which' вместо' button'. – Pang