¿Cuál es la mejor manera de simular que un usuario ingrese texto en un cuadro de entrada de texto en JS y / o jQuery?
En realidad, no quiero poner texto en el cuadro de entrada, solo quiero activar todos los controladores de eventos que normalmente serían activados por un usuario que escribe información en un cuadro de entrada. Esto significa foco, keydown, keypress, keyup y blur. Yo creo que.
Entonces, ¿cómo se lograría esto?
fuente
$('item').trigger('keypress', {which: 'A'.charCodeAt(0)});
ctrlKey: true
, también:shiftKey
,altKey
Podrías enviar eventos como
fuente
el.dispatchEvent(new Event('keypress', {keyCode: 'a'}))
Ctrl
:el.dispatchEvent(new KeyboardEvent('keydown', { keyCode: 70, ctrlKey: true }));
(Esto provocará un atajoCtrl + F
)Para activar una enterpulsación de tecla, tuve que modificar la respuesta @ebynum, específicamente, usando la propiedad keyCode.
fuente
keydown
no se detecta el evento, o estoy haciendo algo mal aquí? fiddle.jshell.net/Palestinian/8d8J9Aquí hay un ejemplo de vanilla js para desencadenar cualquier evento:
fuente
Puede lograr esto con:
EventTarget.dispatchEvent(event)
y pasando un nuevo KeyboardEvent como evento.Por ejemplo:
element.dispatchEvent(new KeyboardEvent('keypress', {'key': 'a'}))
Ejemplo de trabajo:
MDN dispatchEvent
MDN KeyboardEvent
fuente
Ahora puedes hacer:
fuente
En primer lugar, debo decir que la muestra de Sionnach733 funcionó a la perfección. Algunos usuarios se quejan de la ausencia de ejemplos reales. Aquí están mis dos centavos. He estado trabajando en la simulación del clic del mouse cuando uso este sitio: https://www.youtube.com/tv . Puede abrir cualquier video e intentar ejecutar este código. Realiza el cambio al siguiente video.
fuente
Pensé en llamar su atención sobre que en el contexto específico donde se definió un oyente dentro de un complemento jQuery, entonces lo único que simuló con éxito el evento de pulsación de tecla para mí, finalmente captado por ese oyente, fue usar setTimeout (). p.ej
Cualquier uso de
$("#txtName").keypress()
fue ignorado , aunque colocado al final de la.ready() function
. Ningún suplemento DOM particular se estaba creando de forma asíncrona de todos modos.fuente
Para la conversión de mecanografiado a KeyboardEventInit y proporcionar el entero keyCode correcto
fuente