Как связать одновременные события с помощью jQuery

Как привязать одновременные события к селектору в jQuery?

Я не имею в виду, как поймать ЛИБО щелчок или наведение курсора на какой-либо элемент, а как поймать два события при условии, что ОБА из них происходят одновременно. Например, наведение мыши и нажатие клавиши или щелчок и нажатие клавиши, например, Shift+щелчок и т. д.

Заранее спасибо.


person cincplug    schedule 27.10.2011    source источник
comment
Перехват мыши+нажатие клавиши сильно отличается от Shift+щелчок.   -  person Matt Ball    schedule 27.10.2011


Ответы (5)


Обнаружить Shift+щелчок очень просто: проверьте свойство shiftKey объекта event.

Проверка события нажатия клавиши + мыши (одновременно), с другой стороны...:

  • Привязать событие к функции keydown/keyup, которая сохраняет event.keyCode или event.which в переменной
  • Создайте функцию опроса, которая периодически сбрасывает эту переменную, чтобы подсчитывались только нажатия клавиш в течение последних (пример:) 300 миллисекунд.
  • Добавьте событие mousedown, которое проверяет последний сохраненный keyCode, если он существует, и выполняет соответствующий код, если применимо.

Полный код, обрабатывающий несколько событий (в примере два события нажатия клавиши), см. в разделе мой предыдущий ответ.

person Rob W    schedule 27.10.2011
comment
Ну, это ближе всего к тому, что я уже пробовал, за исключением периодического сброса переменной, это звучит как хорошая идея. Спасибо всем. - person cincplug; 27.10.2011

Несколько типов событий можно связать одновременно, включив каждое из них через пробел:

$('#foo').bind('mouseenter mouseleave', function() {
  $(this).toggleClass('entered');
});
person RASG    schedule 27.10.2011
comment
Он хочет, чтобы функция срабатывала только тогда, когда происходят два события. Это не сработает в таком случае. - person FRD; 08.01.2013

привязка Jquery

http://api.jquery.com/bind/

person marko    schedule 27.10.2011

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

person Vlad Balmos    schedule 27.10.2011

JQuery не предлагает такой функциональности из коробки. Вы должны сами отслеживать изменения состояния через события.

person offtehcuff    schedule 27.10.2011