Events Mootools中的事件移除和事件添加的语法

Events Mootools中的事件移除和事件添加的语法,events,mootools,addeventlistener,Events,Mootools,Addeventlistener,因此,我一直在添加我的事件: element.addEvent('click', function() { alert('foobar'); }); 然而,当试图删除所述事件时,该语法相同的代码(将“添加”切换为“删除”)不起作用 element.removeEvent('click', function() { alert('foobar'); }); 我假设这是因为定义的两个函数引用不相同,因此从技术上讲,事件不会被删除。好的,我重新定义了事件的添加和删除: elemen

因此,我一直在添加我的事件:

element.addEvent('click', function() {
    alert('foobar');
});
然而,当试图删除所述事件时,该语法相同的代码(将“添加”切换为“删除”)不起作用

element.removeEvent('click', function() {
    alert('foobar');
});
我假设这是因为定义的两个函数引用不相同,因此从技术上讲,事件不会被删除。好的,我重新定义了事件的添加和删除:

element.addEvent('click', alert('foobar'));
element.removeEvent('click', alert('foobar'));
这非常有效,除了现在页面加载时,点击事件甚至在点击之前就被触发


但是,函数被删除了,这很好……

将函数分配到一个变量,并使用相同的引用来添加和删除事件。 如果使用匿名函数,将获得不同的引用

var test = function(){ alert('test: ' + this.id); } 
$('element').addEvent('click', test);

...
$('element').removeEvent('click', test);

将函数赋值为变量,并使用相同的引用添加和删除事件。 如果使用匿名函数,将获得不同的引用

var test = function(){ alert('test: ' + this.id); } 
$('element').addEvent('click', test);

...
$('element').removeEvent('click', test);

更新:当您执行
.addEvent('type',function(){})
.removeEvent('type',function(){})
时,即使这些函数可能具有相同的“签名”,它们也是两个单独的匿名函数,动态分配。函数1是!==功能2-因此,当MooTools试图删除它时,没有匹配项

为了能够移除精确的处理程序,o:

函数处理程序(){…} el.addEvent('点击',处理程序); // .. 后来 el.removeEvent('点击',处理程序)

在内部,事件实际上是元素存储中函数的键映射。看看这把小提琴,我刚才问了另一个问题-

它将检查在任何给定元素(或所有事件)上针对特定事件类型堆叠了多少事件

类似地,
removeEvent
在事件存储中查找匹配项-查看。因此,使用Nikolaus建议的命名函数可以轻松删除它们,因为它提供了匹配

此外,您还可以通过
元素删除事件。对于所有
单击事件,删除事件(“单击”)

您的页面现在发出警报,因为您将警报作为函数传递,并使用参数“foobar”执行它<在javascript中,code>METHOD
后跟
()
意味着立即而不是稍后运行前面的
方法。将函数绑定到事件时,只传递引用(方法名称)

要避免使用匿名函数并传递参数,可以执行以下操作:

document.id('foobar').addEvent('click', alert.bind(this, 'foo'));
正如bind为您敲打它一样,但删除它将更加复杂

关于活动授权,它是:

parentEl.addEvents({
    "click:relay(a.linkout)": function(e, el) {

    },
    "mouseover:relay(li.menu)": function(e, el) {

    }
});
这里有更多的信息

记住它不是很好/很稳定。对点击功能很好,鼠标不能使用,只能使用鼠标覆盖-这意味着IE可以在不应该的时候发射鼠标。据我所知,mootools 2.0正在对其进行改进

编辑更新以显示mootools中类模式中绑定和未绑定方法的示例

此处的鼠标指针将被解除绑定,
将引用默认范围(即触发事件的元素-a href)。绑定时,可以通过
event.target
获取元素-事件对象始终作为参数传递给函数


顺便说一句,这是一个稍微不太熟悉的类和元素关系的用法,但它在这里用于说明类上下文中的绑定。

更新:当您执行
.addEvent('type',function(){})
.removeEvent('type',function(){})
时,即使函数可能具有相同的“签名”,它们是两个独立的匿名函数,动态分配。函数1是!==功能2-因此,当MooTools试图删除它时,没有匹配项

为了能够移除精确的处理程序,o:

函数处理程序(){…} el.addEvent('点击',处理程序); // .. 后来 el.removeEvent('点击',处理程序)

在内部,事件实际上是元素存储中函数的键映射。看看这把小提琴,我刚才问了另一个问题-

它将检查在任何给定元素(或所有事件)上针对特定事件类型堆叠了多少事件

类似地,
removeEvent
在事件存储中查找匹配项-查看。因此,使用Nikolaus建议的命名函数可以轻松删除它们,因为它提供了匹配

此外,您还可以通过
元素删除事件。对于所有
单击事件,删除事件(“单击”)

您的页面现在发出警报,因为您将警报作为函数传递,并使用参数“foobar”执行它<在javascript中,code>METHOD
后跟
()
意味着立即而不是稍后运行前面的
方法。将函数绑定到事件时,只传递引用(方法名称)

要避免使用匿名函数并传递参数,可以执行以下操作:

document.id('foobar').addEvent('click', alert.bind(this, 'foo'));
正如bind为您敲打它一样,但删除它将更加复杂

关于活动授权,它是:

parentEl.addEvents({
    "click:relay(a.linkout)": function(e, el) {

    },
    "mouseover:relay(li.menu)": function(e, el) {

    }
});
这里有更多的信息

记住它不是很好/很稳定。对点击功能很好,鼠标不能使用,只能使用鼠标覆盖-这意味着IE可以在不应该的时候发射鼠标。据我所知,mootools 2.0正在对其进行改进

编辑更新以显示mootools中类模式中绑定和未绑定方法的示例

此处的鼠标指针将被解除绑定,
将引用默认范围(即触发事件的元素-a href)。绑定时,可以通过
event.target
获取元素-事件对象始终作为参数传递给函数

顺便说一句,这是类和元素关系的一个稍微不太熟悉的用法,但我在这里的目的是说明类上下文中的绑定