Javascript 如果没有StopperPagation方法,如何停止事件冒泡

Javascript 如果没有StopperPagation方法,如何停止事件冒泡,javascript,jquery,event-bubbling,stoppropagation,Javascript,Jquery,Event Bubbling,Stoppropagation,有些html代码如下所示: <ul> <li id='root' class='tree-node'> root <ul> <li class='tree-node' id='node1'>node1</li> <li class='tree-node' id='node2'>node2</li> <li class='tree

有些html代码如下所示:

<ul>
    <li id='root' class='tree-node'>
      root
      <ul>
        <li class='tree-node' id='node1'>node1</li>
        <li class='tree-node' id='node2'>node2</li>
        <li class='tree-node' id='node3'>node3</li>
        <li class='tree-node' id='node4'>node4
            <ul>
                <li class='tree-node' id='node4-1' >node4-1</li>
                <li class='tree-node' id='node4-2' >node4-2</li>                    
            </ul>
        </li>
      </ul>
    </li>

<ul>
StopperPagation()是否有其他方法可以阻止事件从节点4-2冒泡到其父节点


fiddle:

您可以使用文档单击事件,然后从那里处理所有内容

$(document).click(function(e){
    console.log("document clicked!");    
    var t = $(e.target);
    if(t.attr("class") == "tree-node") {
        console.log("tree node clicked");
    }
});​
检查这把小提琴:

或者,您也可以在文档的onclick事件中指定选择器(请检查):


为了便于参考,请检查下面的注释

为什么不想使用stopPropagation?因为我想更常规地调用document click Event(从jQuery 1.7开始),您可以使用
$(document)。在('click','.tree node',function(){…})
,,在这种情况下,单击的节点在函数中显示为
this
。@Beetroot:good point。然而,我在fiddle()中尝试了这一点,然后又出现了传播问题。此外,常规文档点击(在树外)不再被处理…Reinder,直截了当地说是的。当事件冒泡时,它确实会一直激发DOM树。我的观点不完整。我应该补充一点,您可以(在必要时)通过测试
(this==e.target)
来拒绝处理程序中的非目标单击。看见而且常规的文档点击(在树外)处理得非常不正确。更好的是,
e.stopPropagation()
将防止事件在目标以外的元素上触发。这可能与直觉相反,因为事件必须在
文档
开始处理点击时冒泡!请参阅。OP explicit ask to not use
e.stopPropagation()
,那么如何在第一个示例中单击id(它仍然冒泡)?
$(document).click(function(e){
    console.log("document clicked!");    
    var t = $(e.target);
    if(t.attr("class") == "tree-node") {
        console.log("tree node clicked");
    }
});​
$(document).on("click", ".tree-node", function(e) {
    e.stopPropagation();
    console.log("tree node '" + $(this).attr("id") + "' clicked");
});​