该脚本正在获取#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){
...
});
};
}());
但据我所知,为了删除侦听器,我应该使用实函数而不是
addEventListener
和removeEventListener
中的匿名函数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);
请注意,在添加事件并传递函数时,不需要添加参数。您只是在添加对函数的引用(函数指针)。