代码之家  ›  专栏  ›  技术社区  ›  Tower

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

  •  1
  • Tower  · 技术社区  · 16 年前

    我经常需要创建单个事件,这些事件在运行一次之后就不再需要了。我的做法是:

    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 回复  |  直到 16 年前
        1
  •  2
  •   snowandice    16 年前

    我认为你最好的办法是创建一个包装器函数,它可以自动完成这一切。

    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*/});
    
        2
  •  0
  •   gblazex    16 年前

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

    输入较少,事件侦听器变为私有。