Как проверить, нажата ли клавиша во время события click с помощью jQuery?
Я хотел бы поймать событие click с jQuery и узнать, нажата ли клавиша одновременно, поэтому я могу разблокировать функцию обратного вызова на основе события нажатия клавиши.
Например:
$("button").click(function() {
if([KEYPRESSED WHILE CLICKED]) {
// Do something...
} else {
// Do something different...
}
});
Возможно ли это вообще или как это можно сделать, если это возможно?
Ответы
Ответ 1
Вы можете легко обнаружить клавиши shift, alt и control из свойств события;
$("button").click(function(evt) {
if (evt.ctrlKey)
alert('Ctrl down');
if (evt.altKey)
alert('Alt down');
// ...
});
Подробнее о свойствах см. quirksmode. Если вы хотите обнаружить другие ключи, см. ответ cletus.
Ответ 2
Вам нужно отдельно отслеживать состояние ключа, используя keydown()
и keyup()
:
var ctrlPressed = false;
$(window).keydown(function(evt) {
if (evt.which == 17) { // ctrl
ctrlPressed = true;
}
}).keyup(function(evt) {
if (evt.which == 17) { // ctrl
ctrlPressed = false;
}
});
См. список кодов клавиш. Теперь вы можете проверить, что:
$("button").click(function() {
if (ctrlPressed) {
// do something
} else {
// do something else
}
});
Ответ 3
Я смог использовать его только с JavaScript
<a href="" onclick="return Show(event)"></a>
function Show(event) {
if (event.ctrlKey) {
alert('Ctrl down');
}
}
Ответ 4
Без кражи @Arun Prasad thunder, вот чистый фрагмент JS, который я перефразировал, чтобы остановить действие по умолчанию, которое иначе открыло бы новое окно, если нажать CTL + щелчок.
function Show(event)
{
if (event.ctrlKey)
{
alert('Ctrl held down which clicked');
}
else
{
alert('Ctrl NOT pressed');
}
return false
}
<p>Hold down CTL on the link to get a different message</p>
<a href="" onclick="return Show(event)">click me</a>