有人能解释一下,为什么事件处理程序的执行顺序有所不同,具体取决于它们的连接方式?在下面的示例中,我使用.on()
和.addEventListener()
方法处理不同DOM
元素上的特定事件。jQuery .on(); vs JavaScript .addEventListener();
的jsfiddle:http://jsfiddle.net/etsS2/
我认为,在这个特殊的例子的顺序事件处理程序将要执行将取决于event-bubbling
- 所以从原始的事件target
开始,移动到document
元素。
document.getElementById('outer').addEventListener('mouseup', function (event) {
//$('#outer').on('mouseup', function (event) {
alert('This alert should not show up!');
}, false);
如果我取消了on();
版本一切正常 - 有没有在如何处理jQuery
违背纯JavaScript
事件有区别吗?
'return false'在jQuery事件处理程序中也会执行'event.preventDefault()'和'event.stopPropagation()'。 – Jasper
我创建这个结构的原因是因为'a.link'元素是动态添加的,而且我需要阻止'outer' div处理那个特定事件 - 我该如何实现?所以基本上你的意思是:$(document).on('mouseup','a.link'...)等于:$('a.link')。live('mouseup',... )? – MonkeyCoder
是的 - 像'.live()','.delegate()'或新的'.on()'这样的机制可以工作的唯一方式是通过冒泡,冒泡从内到外都可以工作。您可以确保动态添加元素的事件侦听器在添加到DOM时直接绑定到元素。 – Pointy