从onclick处理程序停止事件传播

时间:2014-03-27 16:18:31

标签: javascript dom javascript-events

我正在开发一个遗留的Web应用程序,我正在逐步调整并发现需要从内联的onclick处理程序停止事件传播。

以此为例:

<a id="inner" onclick="return handleOnclick();" href="#">Some link</a>

除了onclick处理程序外,还添加了addEventListener的侦听器。我需要在某些条件下onclick处理程序可以停止事件的传播。我试过了event.stopPropagation(),但它似乎没有用。这是一个测试的方法:

http://jsfiddle.net/APQk6/985/

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

找到基于Felix Kling's评论的解决方案:

  • 需要致电event.stopImmediatePropagation()而不是event.stopPropagation()
  • 需要从内联处理程序传递实际的事件对象(this question也很有用)

这是一个有效的解决方案:

http://jsfiddle.net/r95cC/3/

答案 1 :(得分:1)

您可以使用“已取消”属性。不好,但有效。 http://jsfiddle.net/koldev/45zbA/

<强> HTML

<script>
function handleOnclick(self) {
    self.setAttribute("cancelled", confirm('Stop event?') ? "1" : "0");
    return false;
}
</script>

<div>
    <a id="inner" onclick="return handleOnclick(this);" href="#">Some link</a>
</div>

<强>的JavaScript

document.getElementById('inner').addEventListener('click', function(e){
    if (this.getAttribute("cancelled") == "1") {
        return;
    }
    alert("Listener called");
});