Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法从我自己的事件委派系统中删除事件_Javascript_Event Handling_Dom Events_Event Delegation - Fatal编程技术网

Javascript 无法从我自己的事件委派系统中删除事件

Javascript 无法从我自己的事件委派系统中删除事件,javascript,event-handling,dom-events,event-delegation,Javascript,Event Handling,Dom Events,Event Delegation,我正在尝试编写我自己的事件委派系统,它工作得很好,只是我无法在将事件附加到元素后删除它!我一直在绞尽脑汁想弄清楚这件事。任何帮助都将不胜感激 代码在笔中: 以及以下内容: 加成 洛伦 洛伦 洛伦 洛伦 洛伦 洛伦 洛伦 洛伦 洛伦 洛伦 Javascript Element.prototype.matches=Element.prototype.matches | | Element.prototype.msMatchesSelector; 函数为Descendant(父母、子女){ 对于

我正在尝试编写我自己的事件委派系统,它工作得很好,只是我无法在将事件附加到元素后删除它!我一直在绞尽脑汁想弄清楚这件事。任何帮助都将不胜感激

代码在笔中:

以及以下内容:

加成
    洛伦 洛伦 洛伦 洛伦 洛伦 洛伦 洛伦 洛伦 洛伦 洛伦
Javascript
Element.prototype.matches=Element.prototype.matches | | Element.prototype.msMatchesSelector;
函数为Descendant(父母、子女){
对于(var i=0;i
问题在于
bind()
,它返回一个新函数。
从文件中

bind()方法创建一个新函数,该函数在调用时具有 此关键字设置为提供的值,并具有给定的 调用新函数时,将在任何函数前面提供参数

因此,每次调用
bind
都会得到一个全新的函数,例如在这里

this.parent.addEventListener(options.event, eventCallback.bind(this), false);
这和

var brandNewFunction = eventCallback.bind(this); // creates new function

this.parent.addEventListener(options.event, brandNewFunction, false);
因此,您根本没有传递函数
eventCallback
,而是传递了一个新函数,因此不能使用

this.parent.removeEventListener(options.event, eventCallback, false);
由于您从未传入
eventCallback
,并且
removeEventListener
的函数必须相同才能删除侦听器。
解决办法当然是这样称呼它

this.parent.addEventListener(options.event, eventCallback, false);
找到其他聪明的方法来传递你的选择等等

this.parent.removeEventListener(options.event, eventCallback, false);
this.parent.addEventListener(options.event, eventCallback, false);