removeEventListener en funciones anónimas en JavaScript


Answers

si se encuentra dentro de la función real, puede usar arguments.callee como referencia de la función. como en:

button.addEventListener('click', function() {
      ///this will execute only once
      alert('only once!');
      this.removeEventListener('click', arguments.callee);
});

EDITAR: Esto no funcionará si está trabajando en modo estricto ( "use strict"; )

Question

Tengo un objeto que tiene métodos. Estos métodos se colocan en el objeto dentro de una función anónima. Se parece a esto:

var t = {};
window.document.addEventListener("keydown", function(e) {
    t.scroll = function(x, y) {
        window.scrollBy(x, y);
    };
    t.scrollTo = function(x, y) {
        window.scrollTo(x, y);
    };
});  

(hay mucho más código, pero esto es suficiente para mostrar el problema)

Ahora quiero detener al oyente del evento en algunos casos. Por lo tanto, estoy tratando de hacer un removeEventListener, pero no puedo encontrar la manera de hacerlo. He leído en otras preguntas que no es posible llamar a removeEventListener en funciones anónimas, pero ¿es este también el caso en esta situación?

Tengo un método en t creado dentro de la función anónima y, por lo tanto, pensé que era posible. Se ve como esto:

t.disable = function() {
    window.document.removeEventListener("keydown", this, false);
}

¿Por qué no puedo hacer esto?

¿Hay alguna otra (buena) manera de hacer esto?

Información de bonificación; esto solo tiene que funcionar en Safari, de ahí el soporte faltante, es decir.




window.document.onkeydown = function(){};



window.document.removeEventListener("keydown", getEventListeners(window.document.keydown[0].listener));  

Puede haber varias funciones anónimas, keydown [1]




Esto no es ideal, ya que elimina todo, pero podría funcionar para sus necesidades:

z = document.querySelector('video');
z.parentNode.replaceChild(z.cloneNode(1), z);

La clonación de un nodo copia todos sus atributos y sus valores, incluidos los oyentes intrínsecos (en línea). No copia los detectores de eventos agregados usando addEventListener ()

Node.cloneNode ()




JavaScript : el método addEventListener registra el oyente especificado en EventTarget (Element | document | Window) en el que se invoca.

EventTarget. addEventListener ( event_type , handler_function, Bubbling | Capturing );

Mouse, Keyboard events Prueba de ejemplo en WebConsole:

var keyboard = function(e) {
    console.log('Key_Down Code : ' + e.keyCode);
};
var mouseSimple = function(e) {
    var element = e.srcElement || e.target;
    var tagName = element.tagName || element.relatedTarget;
    console.log('Mouse Over TagName : ' + tagName);    
};
var  mouseComplex = function(e) {
    console.log('Mouse Click Code : ' + e.button);
} 

window.document.addEventListener('keydown',   keyboard,      false);
window.document.addEventListener('mouseover', mouseSimple,   false);
window.document.addEventListener('click',     mouseComplex,  false);

El método removeEventListener elimina el detector de eventos previamente registrado con EventTarget.addEventListener ().

window.document.removeEventListener('keydown',   keyboard,     false);
window.document.removeEventListener('mouseover', mouseSimple,  false);
window.document.removeEventListener('click',     mouseComplex, false);

Puedo usar






Links