知道事件的先前处理程序是否返回false。 IE中的defaultPrevented< 9?

时间:2012-09-28 13:39:56

标签: javascript html event-handling onclick event-bubbling

我在应用程序中添加了一个全局模式“正在加载,请稍候”<div>。每次点击<a><input type="button">时都会显示。这是通过在<body>中分配onclickonload事件处理程序来实现的,以便在事件冒泡时执行:

<body onload="setup()">
    <!-- No control over what will be here -->
</body>

<script>
function setup() {
    document.getElementsByTagName('body')[0].onclick = clickFunc;
}
function clickFunc(eventData) {
    var clickedElement = (window.event) ? event.srcElement : eventData.target;
    if (someConditions) { 
        document.getElementById('modal').style.display = "block";
    }
}
</script>

现在,我在return false中的onclick标记中有一些组件(我无法控制)。这导致模态弹出窗口显示,只有当confirm()并且用户拒绝时才会停留在那里。处理此问题的正确方法可能是preventDefault(),因此事件不会冒出来,如event.preventDefault() vs. return false中所述。

但是我无法控制那部分,所以:有没有办法(最好是非jquery +跨浏览器)知道事件处理程序的先前执行结果(在较低级别)?

如果没有,我猜我只需要在组件的<div>包含onclick时不要显示模态return false

这是一个用于测试的JSFiddle

更新

以下是Bergi的回答是我正在寻找的。但是,IE中似乎不支持defaultPrevented&lt; 9.在IE中是否有相应的/解决方法来实现这一点&lt; 9?

1 个答案:

答案 0 :(得分:1)

您可以检查(window.event ? event.defaultPrevented : eventData.isDefaultPrevented()) == false以捕获 not 返回false的传播事件。