Как обрабатывать отдельные события JavaScript интуитивно? - PullRequest
1 голос
/ 10 октября 2010

Мне часто нужно создавать отдельные события, которые не нужны после их однократного запуска.Я делаю что-то вроде:

A.prototype.someMethod = function () {
    var me = this;
    this.onWindowMouseUpFunction = function () {
        me.onWindowMouseUp.apply(me, arguments);
    };
    window.addEventListener('mouseup', this.onWindowMouseUpFunction, false);
}

A.prototype.onWindowMouseUp = function () {
    window.removeEventListener('mouseup', this.onWindowMouseUpFunction, false);
}

Однако, поскольку логика событий разделена на два метода, и я не могу использовать анонимные функции, а вместо этого должен назначить функцию переменной, я начал думатьчто должен быть лучший способ сделать это, верно?

Ответы [ 2 ]

2 голосов
/ 10 октября 2010

Думаю, ваш лучший способ - создать функцию-оболочку, которая делает все это автоматически.

Что-то вроде

function addOneTimeEventListener(objToListenOn, eventtype, callbackfunction){
 var callThenRemove = function() {
   callbackfunction();
   objToListenOn.removeEventListener(eventtype, callThenRemove, false);   
 };
 objToListenOn.addEventListener(eventtype, callThenRemove, false);
};

Использование

addOneTimeEventListener(window, "mouseup", function(){/*tada, anonymus function*/});
0 голосов
/ 10 октября 2010

Просто сделайте это:

A.prototype.someMethod = function () {
    function onMouseUp() {
        // do stuff ...
        // then remove event listener      
        window.removeEventListener('mouseup', onMouseUp, false);
    }
    window.addEventListener('mouseup', onMouseUp, false);
}

Вводится меньше текста, и ваш слушатель событий становится личным.

...