事件处理程序/事件侦听器
有一个事件侦听器和事件处理程序没有什么区别 - 所有的实际目的,他们是同样的事情。但是,它可能有助于不同的角度思考他们:
我可以定义一个“处理程序” ......
function myHandler(e){ alert('Event handled'); }
...和使用“的addEventListener”将其连接到多个元素:
elementA.addEventListener('click', myHandler);
elementB.addEventListener('click', myHandler, true);
或者,我可以定义我的 “处理” 为 '的addEventListener' 内的封闭:
elementC.addEventListener('click', function(e){ alert('Event Handled'); });
事件捕获/事件冒泡
您可以将事件捕获视为事件冒泡的反面 - 或者作为事件生命周期的两个半部分。 DOM元素可以嵌套(当然)。事件第一个CAPTURES从最外面的父项到最内层的子项,然后BUBBLES从最内层的子项到最外面的父项。
您可能已经注意到,在我上面的示例中,附加到elementB的侦听器具有附加参数 - true - 不传递给elementA。这告诉听众在CAPTURE阶段响应事件,而默认情况下,它会响应BUBBLE阶段。试试这个在jsfiddle.net:
假设我们有3个嵌套的div元素:
<div id="one">
1
<div id="two">
2
<div id="three">
3
</div>
</div>
</div>
...我们附上了 '点击' 处理程序,以每个:如果您单击
document.getElementById('one').addEventListener('click', function(){ alert('ONE'); });
document.getElementById('two').addEventListener('click', function(){ alert('TWO'); }, true);
document.getElementById('three').addEventListener('click', function(){ alert('THREE') });
'1',你会看到一个文本为'ONE'的警告框。如果你点击'2',你会看到一个警告框'TWO',后面跟着一个警告框'ONE'(因为'2'在CAPTURE PHASE第一次被触发,'one'是在泡沫阶段)
如果你点击“3”,你会看到一个警告框,“两节”(俘获)期间的道路上还以颜色了,其次是一个警告框“三化”(BUBBLED),然后是一个警告框'ONE'(BUBBLED)。
清澈如泥,对不对?
据我所知,一个事件处理程序绑定到dom中的一个项目,并且无论dom内容是否在侦听器绑定后加载,事件侦听器都会触发 – kurt