Sé que esta pregunta se ha hecho cientos de veces. Pero una vez más, las soluciones ya no funcionan.
Necesito simular pulsaciones de teclas para automatizar un formulario.
si lo hago asi
document.getElementById("input_id").value = "testinput"los eventos de la entrada no se disparan. Y mi valor se acaba de borrar de nuevo.
¿Existe nuevamente la posibilidad de simular pulsaciones de teclas para que también se activen todos los eventos?
Puede enviar eventos de teclado en un EventTarget (elemento, ventana, documento, otros) como este:
element.dispatchEvent(new KeyboardEvent('keydown', {'key': 'a'}));Ejemplo:
let element = document.querySelector('input'); element.onkeydown = e => alert(e.key); changeValButton.onclick = () => element.value += "a"; dispatchButton.onclick = () => { element.dispatchEvent(new KeyboardEvent('keydown',{'key':'E'})); element.dispatchEvent(new KeyboardEvent('keyup',{'key':'E'})); } <input type="text" value=""> <button id="dispatchButton">Press to dispatch event </button> <button id="changeValButton">Press to change value </button>Ahora he encontrado el siguiente código que funciona para mí:
function set_value(doc, input_value) { doc.value === undefined ? doc.innerHTML = input_value : doc.value = input_value; events = ["keydown", "keypress", "input", "keyup", "change"] for (var i = 0; i < events.length; ++i) doc.dispatchEvent(new Event(events[i], { bubbles: true })); }