Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Ajuda para simular teclado no javascript

Gostaria de simular o aperto de uma tecla de forma que, ao clicar num botão, este acione uma função que enviará o evento para um input ou textarea e apareça a letra "digitada" como se tivesse sido enviada pelo teclado.

No código (teste) abaixo eu fiz o seguinte: No input, o usuário digita uma tecla e uma função armazena o evento na variável y. Ao clicar no botão, uma outra função envia o evento para a textarea. Para saber se o evento estava sendo enviado corretamente coloquei um onkeypress na textarea que retorna um asterisco. Ao clicar no botão, no entanto, aparece o asterisco, comprovando que o evento foi enviado corretamente, mas a letra digitada não aparece na textarea. Eu queria que a letra aparecesse, como se alguém tivesse digitado no teclado, sem ter que alterar nenhum parâmetro da textarea.

Alguém sabe como fazer?

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <script>
        var y;
        function myFunction(event){
            y=event;
            console.log(y);
        }
        function funcao(){
            document.getElementById("entrada2").dispatchEvent(y);
            console.log(y);
        }
    </script>
</head>
<body>
    <input type="text" id="entrada" onkeypress="myFunction(event)" autofocus>
    <textarea id="entrada2" onkeypress="this.innerHTML+='*'"></textarea>
    <button onclick="funcao()">CLIQUE</button>
</body>
</html>
5 respostas

Não sei se entendi o que você queria

Testei o código abaixo e funcionou

function funcao(){
    const entrada2 = document.getElementById("entrada2");
    entrada2.dispatchEvent(y);
    entrada2.innerHTML = y.key;
        }

fiz um outro teste aqui que também funcionou

pode tirar o onkeypress do textarea

function funcao(){
    document.getElementById("entrada2").dispatchEvent(y);
    -------> y.target.value = y.key; <-------
    console.log(y);
}

Boa tarde, André,

Obrigado pela resposta.

Eu queria algo que não utilizasse o innerHTML.

Algo que de fato simulasse o aperto de uma tecla, fazendo com que o input fosse preenchido como se a informação tivesse vindo do teclado.

O meu objetivo é fazer uma macro para o meu trabalho para obter dados de uma página web. Sei que existem maneiras de fazer isso com o VB, se não me engano, existe uma função chamada sendkeys no VB.

solução!

acho que então da outra forma talvez seja o que você precisa y.target.value = y.key;

function funcao(){
    document.getElementById("entrada2").dispatchEvent(y);
    y.target.value = y.key;
    console.log(y);
}

neste caso você está manipulando no evento que foi chamado de keypress (simulando o aperto do botão como você disse)... caso queira tirar alguma dúvida dê um console.log(y.type)

Quando altero o "value" do elemento aparece a mensagem de que eu não tenho autorização, porque o site está num servidor externo. No exemplo que eu forneci funciona, pois está na máquina, mas quando lanço esse tipo de alteração no site do qual desejo obter a informação, o servidor não deixa, por isso precisaria que a informação da tecla fosse enviada para o input como se tivesse sido do teclado. Pesquisei na internet e parece que há algo relacionado à segurança que impede o envio dessa informação por meio de evento. O javascript envia o evento keypress, mas não "digita" no input a tecla correspondente. Vi algumas soluções utilizando ActiveX, mas só funcionaria no Internet Explorer. Pelo jeito vou ter que estudar VB mesmo. Rsrsrs