Программно имитировать пробел, затем возврат на текстовое поле ввода - PullRequest
0 голосов
/ 12 февраля 2020

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

JSFIDDLE https://jsfiddle.net/zvrhfq9j/

THE HTML

<input type="text" name="psychTree-savedNodes" style="width:20%" />

THE JS

$('input[name="psychTree-savedNodes"]').focus();
$('input[name="psychTree-savedNodes"]').trigger({type: 'keypress', which: 32, keyCode: 32});
$('input[name="psychTree-savedNodes"]').trigger({type: 'keyup', which: 32, keyCode: 32});
$('input[name="psychTree-savedNodes"]').trigger({type: 'keydown', which: 32, keyCode: 32});
$('input[name="psychTree-savedNodes"]').trigger({type: 'keypress', which: 8, keyCode: 8});
$('input[name="psychTree-savedNodes"]').trigger({type: 'keyup', which: 8, keyCode: 8});
$('input[name="psychTree-savedNodes"]').trigger({type: 'keydown', which: 8, keyCode: 8});

РЕШЕНИЕ: должен был фактически отправлять события. Спасибо за те, кто на самом деле ответил!

1 Ответ

1 голос
/ 12 февраля 2020

Вы можете имитировать действия пользователя, но они не будут выполнять функции по умолчанию, потому что для 1003 * будет установлено значение false (по соображениям безопасности).

Например, вы можете создайте событие для отправки в текстовое поле, которое «печатает букву« а »». Он будет (err, должен ) запускать любые пользовательские функции, связанные с этим обработчиком событий (el.onkeydown(e){ if( e.key == 'a' ) …), но он не введет букву a в текстовое поле или в противном случае обрабатывать функции браузера по умолчанию на основе этого нажатия клавиши.

Это реализация браузера, а не то, что вы можете обойти. Таким образом, в то время как вы не можете «вводить» непосредственно в поля, вы можете запускать события на основе обработчиков событий, которые прикреплены к этим указанным c событиям.

Я набрал пример кода, чтобы показать, что я имею в виду: https://codepen.io/xhynk/pen/jOPbWzz

  • Страница загружается синим цветом, с 2 полями
  • За 1 секунду , он запустит функцию, которая «имитирует» цепочку событий «click> пробел> backspace».
  • События будут отображать то, что они сделали внутри ввода «no»
  • Страница переворачивается зеленый, чтобы показать, что он погас.

Если вы так склонны, вы можете изменить коды событий на буквы, чтобы увидеть, что фактические нажатия клавиш никогда не появляются на входе "да" . Я добавил поле «нет», в котором есть обработчики событий keydown и onclick, чтобы показать, какие события произошли и в каком порядке, изменив их value.

Вы также можете вручную нажать на ввод «да», затем нажмите «пробел» и «backspace» и увидите, что они тоже запускают функции обработчика событий (функции событий будут работать так же, как и при моделировании), но на этот раз они будет фактически отображаться в поле (потому что вы на самом деле сделали их, поэтому они являются доверенными событиями).

Короче говоря, вы не можете полностью смоделировать "ввод" событий нажатия клавиш, которым доверяют, но вы можете обрабатывать эти указанные c события нажатия клавиш по своему усмотрению (даже при изменении значения текущего ввода, если вы того пожелаете).

Редактировать: я вижу цепочку комментариев породил наверху. Это функция браузера , которую невозможно обойти, если вы не найдете (или не создадите) браузер, который обрабатывает ненадежные isTrusted:false события. Это не имеет ничего общего с локальной средой или средой программирования песочницы.

...