2012-02-10 3 views
3

Возможно ли с помощью jQuery автоматически имитировать нажатие на клавиатуре, f.ex. внутри поля ввода html?автоматически нажимает клавиатуру с jQuery?

Как пояснение: Если я нажму a внутри поля ввода, там появится «a». Я хотел бы сделать это не изнутри клавиатуры, а нажатием кнопки. Я знаю, что могу использовать val("a") на входе, но этого я не хочу достичь.

Я думаю, trigger() не помогает, потому что он вызывает только обработчик события нажатия клавиши. Я не хочу называть обработчика, но активно нажимать на клавиатуру, не выполняя ее на практике!

+1

Это была бы довольно большая уязвимость в системе безопасности!Возможно, это возможно с ActiveX, но не рекомендуется. –

+1

Можете ли вы объяснить, зачем вам это нужно? Может быть лучший метод. –

+0

Боюсь, я не совсем понимаю, что вы пытаетесь сделать. Вы имеете в виду сценарий, который просто генерирует нажатия клавиш, например .. показывая кому-то учебник о том, что писать в поле ввода? Так, например, загрузка страниц -> каждую секунду выводится новое письмо на клавиатуре? Если это не так сложно достичь. – Downpour046

ответ

0

Я не думаю, что есть javascript API для взаимодействия непосредственно с клавиатурой. Я хотел бы предложить комбинировать изменение значения поля с запуском обработчика событий, который обычно соответствует нажатию клавиатуры, как вы упомянули, так что поведение в поле запускается как обычно.

3

триггер помогает, потому что он запускает событие ... и это единственное, что вас интересует в браузере ... все, что до этого является вопросом ОС (чего вы не можете достичь, поскольку вы строите внутри браузер ... если вы не создадите элемент управления activeX). Таким образом, это должно работать:

var e = $.Event("keypress"); 
e.which = <some_key_code>; 
$("<your_input_selector>").trigger(e); 

Как вы можете видеть here событие нажатия клавиши посылается, когда браузер регистрирует ввод с клавиатуры. Разница между нажатием клавиши и нажатием клавиши: «Если пользователь нажимает и удерживает клавишу, событие keydown запускается один раз, но отдельные события keypress запускаются для каждого вставленного символа ...». Вы можете решить, какой из них вы будете использовать в зависимости от вашего варианта использования.

1

Вы можете попробовать что-то вроде.

$("inputSelector").trigger($.Event("keypress", { keyCode: 97 })); 

Пропустите ключ ключа, который вы хотите.

1

Nope. Невозможно в Javascript имитировать фактическое нажатие клавиши клавиатуры. Клавиша Keyboard включает намного больше процесса, который находится за пределами Javascript/Browser.

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

0

Приведение нажатия клавиш в JavaScript (и, следовательно, jQuery) сводится к вставке «типизированного» символа, где вам это нужно, и отстреливать любые соответствующие обработчики (т. Е. С trigger).

1

Мне кажется, что цель не обязательно подражать собственному событию нажатия клавиш браузера, а манипулировать текстом внутри поля ввода.

Если я прав, вы можете получить значения .prop('selectionStart') и .prop('selectionEnd') и перезаписать любые символы в этих индексах по характеру (ы) вы хотите «нажатие клавиши». Вы можете сопровождать это путем запуска соответствующих событий клавиатуры.

Я никогда раньше не работал над выбором текста. Я знаю, что IE обрабатывает вещи по-другому, чем обычные браузеры, поэтому вам нужно будет изучить эту тему и найти решение для кросс-браузера, если вы решите пройти этот путь. Чтобы все было идеально, вам нужно будет изменить свойства выбора после изменения значения ввода, как если бы это была собственная паста.

Смежные вопросы