Qual é a melhor maneira de simular um usuário digitando texto em uma caixa de entrada de texto em JS e / ou jQuery?
Eu não quiser realmente colocar texto na caixa de entrada, eu só quero para acionar todos os eventos manipuladores que normalmente se desencadeada por uma informação do usuário a digitar em uma caixa de entrada. Isso significa foco, pressionamento de tecla, pressionamento de tecla, keyup e desfoque. Eu acho que.
Então, como alguém conseguiria isso?
fonte
$('item').trigger('keypress', {which: 'A'.charCodeAt(0)});
ctrlKey: true
, também:shiftKey
,altKey
Você pode enviar eventos como
fonte
el.dispatchEvent(new Event('keypress', {keyCode: 'a'}))
Ctrl
:el.dispatchEvent(new KeyboardEvent('keydown', { keyCode: 70, ctrlKey: true }));
(Isso causará um atalhoCtrl + F
)Para acionar uma enterpressão de tecla, tive que modificar a resposta @ebynum, especificamente, usando a propriedade keyCode.
fonte
keydown
evento não está sendo capturado, ou estou fazendo algo errado aqui? fiddle.jshell.net/Palestinian/8d8J9Aqui está um exemplo de vanilla js para acionar qualquer evento:
fonte
Você pode conseguir isso com:
EventTarget.dispatchEvent(event)
e passando um novo KeyboardEvent como o evento.Por exemplo:
element.dispatchEvent(new KeyboardEvent('keypress', {'key': 'a'}))
Exemplo de trabalho:
MDN dispatchEvent
MDN KeyboardEvent
fonte
Agora você é capaz de fazer:
fonte
Antes de tudo, preciso dizer que a amostra do Sionnach733 funcionou perfeitamente. Alguns usuários reclamam da ausência de exemplos reais. Aqui estão meus dois centavos. Estive trabalhando na simulação de cliques do mouse ao usar este site: https://www.youtube.com/tv . Você pode abrir qualquer vídeo e tentar executar este código. Ele executa a mudança para o próximo vídeo.
fonte
Pensei em chamar sua atenção que, no contexto específico em que um ouvinte foi definido dentro de um plugin jQuery, a única coisa que simulou com êxito o evento de pressionamento de tecla para mim, eventualmente capturado por esse ouvinte, foi usar setTimeout (). por exemplo
Qualquer uso de
$("#txtName").keypress()
foi ignorado , embora colocado no final do.ready() function
. De qualquer maneira, nenhum suplemento DOM em particular estava sendo criado de forma assíncrona.fonte
Para conversão de texto datilografado em KeyboardEventInit e forneça o número inteiro keyCode correto
fonte