removeEventListener中

removeEventListener中

该脚本正在获取#testDiv并向其中添加一些侦听器,并且工作正常。

(function() {
    this.testObject = function() {
        /*options*/
        this.options = arguments[0];
    };

    /*make object*/
    testObject.prototype.make = function(){

        this.targetElement = document.getElementById('testDiv');

        this.targetElement.addEventListener('mousedown', function(evt){
            ...
        });
        this.targetElement.addEventListener('mouseup', function(evt){
            ...
        });
        this.targetElement.addEventListener('mousemove', function(evt){
            ...
        });

    };
}());


但据我所知,为了删除侦听器,我应该使用实函数而不是addEventListenerremoveEventListener中的匿名函数

this.targetElement.addEventListener('mousedown', mouseDownFunction(evt));
this.targetElement.addEventListener('mouseup', mouseUpFunction(evt));
this.targetElement.addEventListener('mousemove', mouseMoveFunction(evt));


removeEventListener中:

this.targetElement.removeEventListener('mousedown', mouseDownFunction(evt));
this.targetElement.removeEventListener('mouseup', mouseUpFunction(evt));
this.targetElement.removeEventListener('mousemove', mouseMoveFunction(evt));


这里有一个问题,我无法在实函数中获取evt(event)处理函数。 Error: evt is undefined

例如在mouseDownFunction中,我得到undefined:

function mouseDownFunction(evt){

    console.log( evt ); // evt is undefined
    console.log( window.event ) // undefined

}


如何获得evt

提前致谢。

最佳答案

你可以这样做

var listener = function (event) {
  /* do something here */
};
this.targetElement.addEventListener('click', listener, false);
this.targetElement.removeEventListener('click', listener, false);


或仅此,它应该完全相同:

function myListener(event) {
/* do something here */
}

this.targetElement.addEventListener('click', myListener, false);


并将其删除:

this.targetElement.removeEventListener('click', myListener, false);


请注意,在添加事件并传递函数时,不需要添加参数。您只是在添加对函数的引用(函数指针)。

09-19 23:06