在面向对象的JavaScript中删除eventListener

时间:2014-07-09 06:54:04

标签: javascript

我是JavaScript新手OOP !!!

我正在尝试删除eventlistener,但无法使其正常工作:

window.addEventListener('resize', this.adapt.eventBind(this), true);
window.removeEventListener('resize', this.adapt.eventBind(this), true);

这是绑定eventlistener的函数:

Function.prototype.eventBind = function(parentObj) {
var func = this;
var args = new Array();
for(var i = 0; i < arguments.length - 1; i++) {
    args[i] = arguments[i+1];
}
var temp = function(evt) {
    if(typeof(evt) != "undefined") {
        if(typeof(evt["target"]) != "undefined") args[0] = evt["target"];
        else args[0] = evt["srcElement"];
    }
    return func.apply(parentObj, args);
}
return(temp);
}

亲切的问候

1 个答案:

答案 0 :(得分:3)

您传入removeEventListener的功能必须是您提供的{em>相同功能addEventListener;但在你的情况下,你正在创造一个新的,不同的功能。

所以你必须记住它,也许是在同一个对象上:

this.resizeListener = this.adapt.eventBind(this);
window.addEventListener('resize', this.resizeListener, true);
window.removeEventListener('resize', this.resizeListener, true);

(请注意,即使我在添加/删除时使用this.resizeListener,它也没有this问题代码看起来像通常那样,因为我已经使用你的{绑定了它{1}}。)