Lo siento si esta es una pregunta común, pero no pude encontrar ninguna respuesta que pareciera pertinente mediante la búsqueda.¿Cómo agrego y elimino un detector de eventos usando una función con parámetros?
Si hay que adjuntar un detector de eventos como éste:
window.addEventListener('scroll', function() { check_pos(box); }, false);
no parece trabajar para tratar de quitarlo más adelante, así:
window.removeEventListener('scroll', function() { check_pos(box); }, false);
Supongo que esto se debe a la Los métodos addEventListener
y removeEventListener
quieren una referencia a la misma función, mientras les proporciono funciones anónimas que, aunque son idénticas en el código, no son literalmente las mismas.
¿Cómo puedo cambiar mi código para llamar al removeEventListener
para trabajar? El argumento "caja" se refiere al nombre de un que estoy rastreando en la pantalla; es decir, quiero suscribirme al evento scroll
una vez por cada que tengo (la cantidad varía), y una vez que la función check_pos()
mide una posición determinada, llamará a otra función y también eliminará el detector de eventos para liberarlo hasta los recursos del sistema.
Mi corazonada es que la solución implicará un cierre y/o denominación de la función anónima, pero no estoy seguro exactamente de qué se trata, y agradecería un ejemplo concreto.
Espero que tenga sentido. ¡Gracias por cualquier ayuda!
Gracias, Vivin - me corrija si estoy equivocado, pero yo no creo que esto me permitiría configurar varios detectores de eventos con diferentes valores para "caja", que es lo que tengo que hacer. El argumento "caja" no es una variable global. Por ejemplo, simplemente usando valores literales, podría llamar 'window.addEventListener ('scroll', function() {do_something ('string1');}, false);' y más tarde 'window.removeEventListener ('scroll', function () {do_something ('string1');}, false); 'y posterior' window.addEventListener ('scroll', function() {do_something ('string2');}, false); ', etc. – Bungle
Hay un forma de agregar múltiples oyentes de eventos mediante el uso de cierres (Ver http://stackoverflow.com/questions/2276961/is-there-for-window-onload-in-javascript/2277000#2277000). Sin embargo, le sugiero que use jQuery si desea realizar un manejo de eventos serio. Lo hace mucho más fácil. –