使用addEventListener添加事件时如何传递数据?

我想在DOM元素绑定事件时顺便能传一些值给回调函数;
我使用的方法是:

https://img3.mukewang.com/5bbd85a30001810e04990281.jpg

这样可以实现参数的,但是在用到bindFunction函数时出现一个问题,就是他返回的是一个匿名函数,造成添加给dom元素的是一个匿名函数而不是那个函数名,这样就导致事件移除不了。
后来我想了一个解决方法就是在bindFunction函数中存储起这个匿名函数,移除时就能指定到了,于是改造了一下bindFunction这个函数,

https://img.mukewang.com/5bbd85b20001e4c303640109.jpg

然后移除的时候我就可以

https://img2.mukewang.com/5bbd85bf0001d21f04010159.jpg

这样似乎可以解决掉问题,不过总感觉这种方法好像不是很好,还有什么好的方法进行传数据的吗,在绑定事件时。

FFIVE
浏览 1097回答 1
1回答

Cats萌萌

我觉得这样可能更简单一些,绑定事件时返回一个用来解绑的函数,需要解绑时就直接调用它,就可以了。function addEvent(element,type,fn,data,_this){    _this = _this ? _this : element;    var bound = bindFunction(_this,fn,data);    if(element.addEventListener){        element.addEventListener(type,bound,false);    }else if(element.attachEvent){        element.attachEvent('on'+type,bound);    }else{        element['on'+type] = fn.apply(_this,[arguments,data]);    }    return function(){        if(element.removeEventListener){            element.removeEventListener(type,bound,false);        }else if(element.attachEvent){            element.detachEvent('on'+type,bound);        }else{            element['on'+type] = null;        }    };}//绑定var unbinder = addEvent(/*此处省略*/);//解除上面的绑定unbinder();
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript