日期:2014-05-16  浏览次数:20361 次

不冒泡的事件怎么调用事件处理程序?
本帖最后由 jonzrj 于 2014-02-27 16:58:35 编辑
<body>
<ul id="mylist">
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
</body>


EventUtil.addHandler(window, "load", function(event) {
    var list = document.getElementById("myList");
    EventUtil.addHandler(document, "DOMSubtreeModified", function(event) {
        alert(event.type);//DOMSubtreeModified
        alert(event.target);//object HTMLHtmlElement
    });

    EventUtil.addHandler(document, "DOMNodeRemoved", function(event) {
        alert(event.type);//DOMNodeRemoved
        alert(event.target);//object HTMLDivElement
        alert(event.relatedNode);//object HTMLHtmlElement
    });

    //###这里为什么不能直接指定节点<ul>(list)?###
    EventUtil.addHandler(list.firstChild, "DOMNodeRemovedFromDocument", function(event) {
        alert(event.type);//DOMNodeRemoved
        alert(event.target);//object HTMLUListElement
        alert(event.relatedNode);//object HTMLBodyElement
    });

    list.parentNode.removeChild(list);
});


我看js高级程序设计P386看到这句:
“如果被移除的节点包含子节点,那么在其所有子节点以及这个被移除的节点上会相继触发 DOMNodeRemovedFromDocument 事件。但这个事件不冒泡,所以只有直接指定给其中一个子节点的事件处理程序才会被调用。”
这里为什么不能直接指定节点<ul>?(好吧其实我没看懂上面这段,求拍砖)
------解决方案--------------------
不冒泡的意思是不会触发父元素的对应事件吧,上面那段代码应该只有最后一段会执行