Quiero adjuntar un detector de eventos de pulsación de tecla a cada uno de los elementos de words dom y pasar el elemento en sí (me refiero a word ) al eventHandler , ¿de acuerdo?
Así que probé esto pero parece que pierdo el evento en sí:
const eventHandler = (e, word) => { console.log('keypressed', String.fromCharCode(e.which), word); } words.forEach((word) => { window.addEventListener("keypress", eventHandler.bind(event, word)); }); String.fromCharCode(e.which) debería traer la tecla presionada en el teclado, ¡pero no devuelve nada!
¿Cómo puedo arreglar esto?
Editar:
Aquí está la reproducción más simple del problema: presione cualquier tecla en el teclado y vea que el evento no está definido:
const eventHandler = (event, word) => { console.log('keypressed', event, word); } window.addEventListener("keypress", eventHandler.bind(this, event, 'word'));El evento se pasa implícitamente y será el último parámetro después de todos los parámetros vinculados.
Entonces usaría eventHandler.bind(null, word) y luego el controlador debería declararse eventHandler(word, e) {...}
const button = document.getElementById('b'); function handler(bound_arg, event){ console.log(event.target); console.log(bound_arg); } button.addEventListener('click', handler.bind(null,'bound')); <button type='button' id='b'>Bound</button> Pero esto no es muy intuitivo, y dado que bind() crea una nueva función de todos modos, podría simplemente usar una función anónima para pasar la palabra.
window.addEventListener("keypress", (e) => eventHandler(e, word));