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
获取元素-事件对象始终作为参数传递给函数
顺便说一句,这是类和元素关系的一个稍微不太熟悉的用法,但我在这里的目的是说明类上下文中的绑定