#jquery #keyboard-events #keyboard-hook
#jquery #клавиатура-события #перехват клавиатуры
Вопрос:
Мне нужно иметь возможность заменять нажатие клавиши на jQuery. Когда нажата стрелка вправо, я хочу, чтобы вместо нее была нажата клавиша tab. Пока у меня есть:
<script type="text/javascript" src="jquery-1.6.1.min.js"></script>
<script type="text/javascript" src="jquery.simulate.js"></script>
<script type="text/javascript">
$(function () {
$("select").each( function() {
$(this).keydown(function(event) {
if (event.which == '39') {
$(this).simulate("keydown", { keyCode: 9, ctrlKey: false, shirtKey: false });
$(this).simulate("keypress", { keyCode: 9, ctrlKey: false, shirtKey: false });
$(this).simulate("keyup", { keyCode: 9, ctrlKey: false, shirtKey: false });
return false;
}
});
});
});
</script>
39 — это стрелка вправо, а 9 — кнопка табуляции. Кроме того, имитация нажатия клавиши рекурсивно вызывает обработчик события, что, очевидно, плохо, но даже без этой строки это все равно не работает.
Я использую jquery.simulate.js находится по адресу (http://code.google.com/p/jqueryjs/source/browse/trunk/plugins/simulate/jquery.simulate.js?r=6063 ) потому что я не смог найти способ имитировать нажатие клавиши только с помощью jQuery.
Нажатие клавиши просто не имитирует фактическое нажатие клавиши.
Комментарии:
1. не было бы проще
focus
для правильного элемента (если вы используете это для выполненияtab
)2. Вам действительно нужно имитировать табуляцию или просто переместить фокус, если вы просто пытаетесь переместить фокус на следующий элемент, возможно, проще сделать $ (‘#nextElement’).focus();
3. было бы неплохо сосредоточиться на следующем элементе, но я пытаюсь сделать это на автоматически генерируемой странице, поэтому у меня нет возможности узнать идентификатор следующего элемента, имя или что-то в этом роде. я просто знаю, что хочу переключить фокус на следующий tabindex.
Ответ №1:
Вы не можете имитировать фактические нажатия клавиш с помощью javascript. Это основной компонент безопасности браузера. Представьте, что вы можете имитировать Alt-Tab или Ctrl-Shift-Del.
Вы, конечно, можете определить метод, который инкапсулирует поведение, которое вы хотите запустить, и вызывать этот метод при нажатии определенных клавиш.
Так, например, чтобы перейти к следующему элементу select, когда кто-то нажимает стрелку вправо, находясь на другом элементе select, я бы сохранил список всех элементов select на странице; когда нажата стрелка вправо, я бы нашел позицию текущего элемента select в этом списке, а .focus() — следующую.