removeEventListener для анонимных функций в JavaScript

Я попробовал iPhoney и по сравнению с моим iPhone (Mark 1), это не то же, это близко - но не достаточно близко полагаться, если интерфейс важен для Вас.

90
задан Brian Tompsett - 汤莱恩 26 August 2019 в 19:17
поделиться

1 ответ

Я знаю, что это - довольно старый поток, но думало, что я мог бы вставить свои два цента для тех, кто находит это полезным.

сценарий (извинения о нетворческих именах методов):

window.Listener = {
    _Active: [],
    remove: function(attached, on, callback, capture){
        for(var i = 0; i < this._Active.length; i++){
            var current = this._Active[i];
            if(current[0] === attached && current[1] === on && current[2] === callback){
                attached.removeEventListener(on, callback, (capture || false));
                return this._Active.splice(i, 1);
            }
        }
    }, removeAtIndex(i){
        if(this._Active[i]){
            var remove = this._Active[i];
            var attached = remove[0], on = remove[1], callback = remove[2];
            attached.removeEventListener(on, callback, false);
            return this._Active.splice(i, 1);
        }
    }, purge: function(){
        for(var i = 0; i < this._Active.length; i++){
            var current = this._Active[i];
            current[0].removeEventListener(current[1], current[2]);
            this._Active.splice(i, 1);
        }
    }, declare: function(attached, on, callback, capture){
        attached.addEventListener(on, callback, (capture || false));
        if(this._Active.push([attached, on, callback])){
            return this._Active.length - 1;
        }
    }
};

И можно использовать его как так:

// declare a new onclick listener attached to the document
var clickListener = Listener.declare(document, "click" function(e){
    // on click, remove the listener and log the clicked element
    console.log(e.target);
    Listener.removeAtIndex(clickListener);
});

// completely remove all active listeners 
// (at least, ones declared via the Listener object)
Listener.purge();

// works exactly like removeEventListener
Listener.remove(element, on, callback);
0
ответ дан 24 November 2019 в 06:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: