Tengo un detector de eventos en una casilla de verificación que pasa algunos argumentos usando "esto", sin embargo, por alguna razón no funciona.
Al enviar "esto" a la consola, puedo ver que, a diferencia de mis otros detectores de eventos que estoy usando para la entrada de texto y seleccionar nodos, está devolviendo el objeto de ventana completo
El código que estoy usando:
document.getElementById("nightMode").addEventListener('change', () => { console.log(this) })Lo que esperaría ver en la consola:
<input id="nightMode" type="checkbox" />Lo que realmente se está enviando a la consola:
Window {window: Window, self: Window, document: document, name: '', location: Location, …}Es porque estás usando una función de flecha ( () => { ... } ). Reemplácelo con una función normal ( function() { ... } ).
Las funciones de flecha no tienen this propio. No puede cambiar; this dentro de una función de flecha siempre apuntará a lo this fuera en el momento en que se declaró la función .
usa este código en su lugar:
<input id="nightMode" type="checkbox" onchange="alert(this)">Eso es porque cuando usa la función de flecha, ha vinculado this de su alcance global (Ventana) a su función de controlador.
Trate de usar la calcomanía de función normal en su lugar: function () { ... }