Javascript удалить прослушиватель событий, сделанный в объекте - PullRequest
0 голосов
/ 14 февраля 2012

Я использовал приведенный ниже код для добавления прослушивателя событий в тело, но не могу удалить его

this.events = {
    addEventListener : function(element, eventName, eventHandler, scope) {
        var scopedEventHandler = scope ? function(e) { eventHandler.apply(scope, [e]); } : eventHandler;
        if(document.addEventListener)
            element.addEventListener(eventName, scopedEventHandler, false);
        else if(document.attachEvent)
            element.attachEvent("on"+eventName, scopedEventHandler);
    }
}
this.events.addEventListener( document.body, "keydown", this.keyEvent, this);

1 Ответ

0 голосов
/ 14 февраля 2012

Изменяя обработчик событий в вашем this.events объекте, обработчики событий больше не совпадают.

http://jsfiddle.net/asXzA/1/

Я предлагаю вам создать реестр событий, добавленных через ваш* Система 1007 *, таким образом, вы можете легко вытаскивать вещи.

this.events = {
    eventRegistry : {},

    addEventListener : function(element, eventName, eventHandler, scope) {
        var scopedEventHandler = scope ? function(e) { eventHandler.apply(scope, [e]); } : eventHandler;

        // save the scoped event handler
        if (typeof eventRegistry == "undefined")                
            eventRegistry = {};

        if (typeof eventRegistry[eventName] == "undefined")
            eventRegistry[eventName] = {};

        eventRegistry[eventName][eventHandler] = scopedEventHandler;

        if(document.addEventListener)
            element.addEventListener(eventName, scopedEventHandler, false);
        else if(document.attachEvent)
            element.attachEvent("on"+eventName, scopedEventHandler);
    },

    removeEventListener : function(element, eventName, eventHandler, scope) {

        // retrieve saved event handler
        var scopedEventHandler = eventRegistry[eventName][eventHandler];

        if(document.removeEventListener)
            element.removeEventListener(eventName, scopedEventHandler, false);
        else if(document.detachEvent)
            element.detachEvent("on"+eventName, scopedEventHandler);
    }
};

this.keyEvent = function () { alert("keypressed"); this.events.removeEventListener(document.body, "keydown", this.keyEvent, this); alert("removed"); };
this.events.addEventListener( document.body, "keydown", this.keyEvent, this);​
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...