除非您通过span或列表上的处理程序捕捉并抑制单击,否则上面的代码应该可以工作,并且在这里可以工作:
http://jsbin.com/etuka3
(即
observe
代码可以缩短,但是,通过
invoke
:
http://jsbin.com/etuka3/2
).
如我所知,大多数DOM事件从一个元素“冒泡”到它的父元素
它的
父元素等,除非冒泡被链中某个事件处理程序取消。例如,在
this version
在上面,我勾住
click
上
li
并防止事件到达
div
:
$$('#contents > div li').invoke('observe', 'click', function(event) {
event.stopPropagation(); // Prevents the event from bubbling up to the ancestors
});
……这意味着点击
锂
,和
分区
看不到咔嗒声。但您必须故意这样做,仅将事件挂接到子元素上就可以了
不
防止冒泡,如你所见
this example
:
$$('#contents > div li').invoke('observe', 'click', function(event) {
display("list item clicked");
});
现在当我点击
锂
,我们可以看到
锂
的处理程序被触发,然后(因为我没有停止冒泡)
分区
的处理程序被触发。