【问题标题】:restrict event propagation in javascript限制javascript中的事件传播
【发布时间】:2011-04-25 14:25:31
【问题描述】:

如何防止事件在 javascript 中冒泡到父级?

例如。

<tr id="my_tr" onclick="javascript:my_tr_click();">
   <td>
      <a id="my_atag" href="javascript:void(0);" onclick="javascript:my_a_click();">Delete</a>
   <td>
</tr>

当我单击“删除”锚标记时,首先调用 my_a_click() 函数,然后调用父 tr onclick 函数 - my_tr_click() - .我相信这就是所谓的事件传播。

当我单击子锚标记时,如何阻止 my_tr_click() 函数被调用?

请帮帮我..

谢谢

【问题讨论】:

    标签: javascript event-handling


    【解决方案1】:

    来自quirks mode 和这个answer 这很可能是您想要处理内联onclick() 的方法。

    function my_a_click(e) {
        e.cancelBubble = true;
        if (e.stopPropagation) e.stopPropagation();
    }
    

    并调整您的标记:

    <a id="my_atag" href="javascript:void(0);" onclick="var event = arguments[0] || window.event; my_a_click(event);">Delete</a>
    

    Working example on jsfiddle

    在 chrome、firefox 4 和 IE9 中测试。

    话虽如此,如果 jQuery 是一个选项,它会让事情变得很多更容易。

    $("#my_atag").click(function(e){
      e.stopPropagation();
    });
    

    <a id="my_atag" href="javascript:void(0);">Delete</a>
    

    【讨论】:

    • 您给出的示例在 Chrome 上运行良好,但在 Firefox 中不起作用..它在那里调用 tr onclick 函数..
    • 检查并完美运行......非常感谢,你是救世主......上帝保佑你......
    【解决方案2】:

    我想你可能对http://www.quirksmode.org/js/introevents.html感兴趣

    something.onclick = function (e) {
        e.cancelBubble = true;
        if (e.stopPropagation) e.stopPropagation();
    }
    

    【讨论】:

    • 您好罗伯特,感谢您的回复.. 这个解决方案似乎不适用于 Firefox..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多