javascript - 我如何在没有 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-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>

我想将点击事件绑定(bind)到每个具有树节点类的标签

并将点击事件绑定(bind)到文档

这是我的代码:

$(".tree-node").click(function(e){
    console.log($(this).attr("id"));
});

$(document).click(function(e){
    console.log("document clicked!");   
});

stopPropagation() 是否有任何替代方法来阻止事件从 node4-2 冒泡到其父节点?

fiddle :http://jsfiddle.net/R6ySc/

最佳答案

您可以只使用文档点击事件并从那里处理所有事情。

$(document).click(function(e){
    console.log("document clicked!");    
    var t = $(e.target);
    if(t.attr("class") == "tree-node") {
        console.log("tree node clicked");
    }
});​

检查这个 fiddle :http://jsfiddle.net/R6ySc/3/

作为替代方案,您还可以在文档的 onclick 事件中指定一个选择器(为此检查 jQuery documentation):

$(document).on("click", ".tree-node", function(e) {
    e.stopPropagation();
    console.log("tree node '" + $(this).attr("id") + "' clicked");
});​

作为引用,查看下面的评论

关于javascript - 我如何在没有 stopPropagation 方法的情况下停止事件冒泡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13117667/

相关文章:

javascript - jQuery 触发点击给出 "too much recursion"

javascript - 为什么在 Raphaël 中拖动会因在气泡阶段的封闭元素中停止 mousemove 的传播而中断?

javascript - 如何在同一个php文件中的php代码之后运行javascript代码?

Javascript Promises 显式函数与内联函数

javascript - 无 Chrome 的 YouTube 视频播放器和 Internet Explorer

reactjs - Material ui select onchange 不冒泡

javascript - 将 react 应用程序部署到 netlify 时缺少构建脚本错误

javascript - 将 div 包裹在文本周围

javascript - 如何只选择被单击的 "tr"元素?

jquery 正则表达式选择器