function doSomethingWith(param)
{
document.body.addEventListener(
'scroll',
function()
{
document.write(param);
},
false
); // An event that I want to remove later
}
setTimeout(
function()
{
document.body.removeEventListener('scroll', HANDLER ,false);
// What HANDLER should I specify to remove the anonymous handler above?
},
3000
);
doSomethingWith('Test. ');
Respuesta
No puede. Tienes que usar una función nombrada o almacenar la referencia de alguna manera.
var handler;
function doSomethingWith(param) {
handler = function(){
document.write(param);
};
document.body.addEventListener('scroll', handler,false);
}
setTimeout(function() {
document.body.removeEventListener('scroll', handler ,false);
}, 3000);
Lo mejor sería hacer esto de una manera estructurada, de manera que pueda identificar diferentes manipuladores y eliminarlos. En el ejemplo anterior, obviamente solo puedes eliminar el último controlador.
Actualización:
Usted puede crear su propio controlador de controlador (:)):
var Handler = (function(){
var i = 1,
listeners = {};
return {
addListener: function(element, event, handler, capture) {
element.addEventListener(event, handler, capture);
listeners[i] = {element: element,
event: event,
handler: handler,
capture: capture};
return i++;
},
removeListener: function(id) {
if(id in listeners) {
var h = listeners[id];
h.element.removeEventListener(h.event, h.handler, h.capture);
delete listeners[id];
}
}
};
}());
Entonces se puede usar con:
function doSomethingWith(param) {
return Handler.addListener(document.body, 'scroll', function() {
document.write(param);
}, false);
}
var handler = doSomethingWith('Test. ');
setTimeout(function() {
Handler.removeListener(handler);
}, 3000);
No puedes, necesitas una referencia a la función:
function doSomethingWith(param) {
var fn = function(){ document.write(param); };
document.body.addEventListener('scroll', fn, false);
setTimeout(function(){ document.body.removeEventListener('scroll', fn, false); }, 3000);
}
doSomethingWith('Test. ');
También podría hacerlo así:
const ownAddEventListener = (scope, type, handler, capture) => {
scope.addEventListener(type, handler, capture);
return() => {
scope.removeEventListener(type, handler, capture);
}
}
Entonces se puede quitar el detector de eventos como éste:
// Add event listener
const disposer = ownAddEventListener(document.body, 'scroll',() => {
// do something
}, false);
// Remove event listener
disposer();
¿Es posible determinar qué eventos se han vinculado al objeto de esta manera? – frumbert
Puede agregar algunas propiedades a la función, como el tipo, alcance, etc. 'const disposerFn =() => {scope.removeEventListener (type, handler, capture); } ' ' disposerFn.type = tipo; ' ' return disposerFn; ' –
- 1. BitMap Eventlistener no funciona
- 2. addEventListener que no trabajan con onbeforeunload
- 3. ¿Es posible agregar un eventlistener en un DIV?
- 4. Desvincular una función anónima
- 5. En Clojure, ¿es posible definir una función anónima dentro de una función anónima?
- 6. C#: ordenando con la función anónima
- 7. ¿Es un EventListener un observable?
- 8. Nombrar una función anónima
- 9. javascript onclick, función anónima
- 10. Cierre vs función anónima
- 11. Scala expresiones regulares reemplazar con función anónima
- 12. Cómo refactorizar esta función anónima de Javascript?
- 13. Cómo encadenar una función anónima en jQuery?
- 14. función anónima regresar 1, usando #()
- 15. eliminar un oyente que tiene una función anónima en Actionscript 3
- 16. Lambda \ Función anónima como parámetro
- 17. Coffeescript --- ¿Cómo crear una función anónima autoiniciativa?
- 18. ¿Cómo ejecutar una función anónima en Perl?
- 19. Javascript previene la función anónima?
- 20. ¿Cómo actualizo a addEventListener?
- 21. burbujeante y capturando con addEventListener
- 22. JavaScript: ¿Cómo pasar una función anónima como parámetro de función?
- 23. Función recursiva anónima en Scala
- 24. Javascript parámetro de la función anónima que pasa
- 25. TypeError no detectada: invocación ilegal en addEventListener
- 26. Las variables estáticas en una función anónima
- 27. setTimeout() con cadena o referencia de función (anónima)? speedwise
- 28. Omisión de salidas con función anónima en MATLAB
- 29. Java swing: Cómo eliminar un ActionListener anónima de un componente
- 30. Javascript llamada a la función anónima
Podría explicar cuál es la forma estructurada es? Mi habilidad en inglés no es lo suficientemente buena como para entender eso ... Gracias. – Japboy
@Japboy: Por favor, mira mi actualización. –
Gracias por su actualización. Esto sería útil! – Japboy