Как мне привязать функцию к клавишам со стрелками влево и вправо в Javascript и/или jQuery? Я посмотрел плагин js-hotkey для jQuery (обертывает встроенную функцию связывания, чтобы добавить аргумент для распознавания определенных ключей), но, похоже, не поддерживает клавиши со стрелками.
Связывание клавиш со стрелками в JS/jQuery
Ответ 1
$(document).keydown(function(e) {
switch(e.which) {
case 37: // left
break;
case 38: // up
break;
case 39: // right
break;
case 40: // down
break;
default: return; // exit this handler for other keys
}
e.preventDefault(); // prevent the default action (scroll / move caret)
});
Поместите свой код для клавиш со стрелками между соответствующими строками case
и break
.
e.which
нормализуется jQuery, поэтому он работает во всех браузерах. Для чистого javascript-подхода замените первые две строки:
document.onkeydown = function(e) {
e = e || window.event;
switch(e.which || e.keyCode) {
(изменить 2017)
Если вам кажется, вы можете использовать e.key
вместо e.which
или e.keyCode
. e.key
становится рекомендуемым стандартом, позволяющим вам проверять строки: 'ArrowLeft'
, 'ArrowUp'
, 'ArrowRight'
, 'ArrowDown'
. Новые браузеры поддерживают его изначально, здесь проверьте.
Ответ 2
$(document).keydown(function(e){
if (e.keyCode == 37) {
alert( "left pressed" );
return false;
}
});
Коды символов:
37 - левый
38 - вверх
39 - правый
40 - вниз
Ответ 3
Вы можете использовать keyCode клавиш со стрелками (37, 38, 39 и 40 для левого, правого и правого):
$('.selector').keydown(function (e) {
var keyCode = e.keyCode || e.which,
arrow = {left: 37, up: 38, right: 39, down: 40 };
switch (keyCode) {
case arrow.left:
//..
break;
case arrow.up:
//..
break;
case arrow.right:
//..
break;
case arrow.down:
//..
break;
}
});
Проверьте приведенный выше пример здесь.
Ответ 4
Это немного поздно, но HotKeys имеет очень серьезную ошибку, которая заставляет события выполняться несколько раз, если вы присоединяете к одному элементу более одной горячей клавиши. Просто используйте простой jQuery.
$(element).keydown(function(ev) {
if(ev.which == $.ui.keyCode.DOWN) {
// your code
ev.preventDefault();
}
});
Ответ 5
Я просто собрал лучшие бит из других ответов:
$(document).keydown(function(e){
switch(e.which) {
case $.ui.keyCode.LEFT:
// your code here
break;
case $.ui.keyCode.UP:
// your code here
break;
case $.ui.keyCode.RIGHT:
// your code here
break;
case $.ui.keyCode.DOWN:
// your code here
break;
default: return; // allow other keys to be handled
}
// prevent default action (eg. page moving up/down)
// but consider accessibility (eg. user may want to use keys to choose a radio button)
e.preventDefault();
});
Ответ 6
Вы можете использовать KeyboardJS. Я написал библиотеку для задач именно так.
KeyboardJS.on('up', function() { console.log('up'); });
KeyboardJS.on('down', function() { console.log('down'); });
KeyboardJS.on('left', function() { console.log('right'); });
KeyboardJS.on('right', function() { console.log('left'); });
Оформить здесь библиотеку = > http://robertwhurst.github.com/KeyboardJS/
Ответ 7
Вы уверены, что jQuery.HotKeys не поддерживает клавиши со стрелками? Я добрался до своей демо до и наблюдал за левым, правым, вверх и вниз, работая, когда тестировал его в IE7, Firefox 3.5.2 и Google Chrome 2.0.172...
РЕДАКТИРОВАТЬ: появляется jquery.hotkeys переместился в Github: https://github.com/jeresig/jquery.hotkeys
Ответ 8
Тесное решение с использованием простого Javascript (спасибо Sygmoral за предлагаемые улучшения):
document.onkeydown = function(e) {
switch (e.keyCode) {
case 37:
alert('left');
break;
case 39:
alert('right');
break;
}
};
Также см. fooobar.com/questions/17885/....
Ответ 9
Вместо использования return false;
, как в приведенных выше примерах, вы можете использовать e.preventDefault();
, который делает то же самое, но его легче понять и прочитать.
Ответ 10
Вы можете использовать привязку jQuery:
$(window).bind('keydown', function(e){
if (e.keyCode == 37) {
console.log('left');
} else if (e.keyCode == 38) {
console.log('up');
} else if (e.keyCode == 39) {
console.log('right');
} else if (e.keyCode == 40) {
console.log('down');
}
});
Ответ 11
Вы можете проверить, нажата ли кнопка arrow key
:
$(document).keydown(function(e){
if (e.keyCode > 36 && e.keyCode < 41) {
alert( "arrowkey pressed" );
return false;
}
});
Ответ 12
Пример чистых js при переходе вправо или влево
window.addEventListener('keydown', function (e) {
// go to the right
if (e.keyCode == 39) {
}
// go to the left
if (e.keyCode == 37) {
}
});
Ответ 13
предотвратить стрелку, доступную только для любого объекта SELECT, ну, на самом деле, у меня нет tes на другом объекте LOL. но он может остановить событие стрелки на странице и типе ввода.
Я уже пытаюсь заблокировать стрелку влево и вправо, чтобы изменить значение объекта SELECT с помощью "e.preventDefault()" или "return false" на "kepress" "keydown" и "keyup", но все равно изменить объект стоимость. но событие все еще говорит вам, что стрелка была нажата.
Ответ 14
Введена надежная библиотека Javascript для ввода ввода клавиатуры и комбинаций клавиш. У него нет зависимостей.
http://jaywcjlove.github.io/hotkeys/
hotkeys('right,left,up,down', function(e, handler){
switch(handler.key){
case "right":console.log('right');break
case "left":console.log('left');break
case "up":console.log('up');break
case "down":console.log('down');break
}
});
Ответ 15
Я пришел сюда, чтобы найти простой способ позволить пользователю, ориентируясь на ввод, использовать клавиши со стрелками для +1 или -1 числовой ввод. Я никогда не нашел хорошего ответа, но сделал следующий код, который, кажется, отлично работает - теперь этот сайт доступен.
$("input").bind('keydown', function (e) {
if(e.keyCode == 40 && $.isNumeric($(this).val()) ) {
$(this).val(parseFloat($(this).val())-1.0);
} else if(e.keyCode == 38 && $.isNumeric($(this).val()) ) {
$(this).val(parseFloat($(this).val())+1.0);
}
});
Ответ 16
С кофе и JQuery
$(document).on 'keydown', (e) ->
switch e.which
when 37 then console.log('left key')
when 38 then console.log('up key')
when 39 then console.log('right key')
when 40 then console.log('down key')
e.preventDefault()