Как мне заменить нажатие клавиши на jQuery?

#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() — следующую.