我经常需要创建一次运行后不需要的单个事件。我的方式是:
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>
答案 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);
}
涉及的打字较少,您的事件监听器变为私密。