如何直观地处理单个JavaScript事件?

时间:2010-10-10 14:36:45

标签: javascript events javascript-events event-handling

我经常需要创建一次运行后不需要的单个事件。我的方式是:

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);
}

但是,由于事件逻辑被分成两个方法而且我不能使用匿名函数而是必须将函数赋值给变量,我开始认为必须有更好的方法来做到这一点,对吧? / p>

2 个答案:

答案 0 :(得分:2)

我认为你最好的方法是创建一个自动完成所有这一切的包装函数。

这样的东西
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*/});

答案 1 :(得分:0)

只需这样做:

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

涉及的打字较少,您的事件监听器变为私密。