Estoy creando una extensión de Chrome que genera apodos cuando presiona Ctrl+Shift+U, y debería ingresar automáticamente el nombre generado en el campo de texto seleccionado, si se selecciona uno. Mi problema es que hay muchos tipos de campos de texto, siendo el más básico el de entrada. Esta es actualmente mi función que genera el apodo, que funciona para campos de entrada y campos de área de texto, pero para nada más.
//Nickname gets generated here //... var inp = document.querySelectorAll("input"); var txt = document.querySelectorAll("textarea"); for (var i=0;i<inp.length;i++) { if (inp[i] == document.activeElement) { inp[i].value = nick; } } for (var i=0;i<txt.length;i++) { console.log(txt[i]); if (txt[i] == document.activeElement) { txt[i].innerHTML = nick; } }Básicamente, lo que creo que necesitaría es algún tipo de función que pueda actuar como si el usuario estuviera escribiendo el nombre, sin cambiar directamente el valor de un campo.
Gracias a la respuesta de wOxxOm , con un poco de modificación, conseguí que funcionara. Este es mi código final:
//Nickname gets generated here //... const keyboardEventInit = {bubbles:false, cancelable:false, composed:false, key:'', code:'', location:0}; const element = document.activeElement; if (element) { element.dispatchEvent(new KeyboardEvent("keydown", keyboardEventInit)); element.value = nick; element.dispatchEvent(new KeyboardEvent("keyup", keyboardEventInit)); element.dispatchEvent(new Event('change', {bubbles: true})); }