我在应用程序中放入了全局模态"Loading,please wait"<div>
。每次单击<a>
或<input type="button">
时都会显示。这是通过在onload
中为<body>
分配一个onclick
事件处理程序来实现的,以便在事件出现气泡时执行:
<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>
现在,我在标记中有一些组件(我无法控制),它们在onclick
s中执行return false
。这会导致模式弹出窗口显示,并且在出现confirm()
而用户拒绝时保持不变。处理此问题的正确方法可能是preventDefault()
,这样事件就不会冒泡,正如event.prventDefault()与return false中所解释的那样。
但我无法控制这一部分,所以:有没有一种方法(最好是非jquery+跨浏览器)可以知道以前执行事件处理程序(在较低级别)的结果?
如果没有,我想只要组件的onclick
包含return false
,我就必须避免显示模态<div>
。
这是一个用于测试的JSFiddle。
更新
Bergi下面的答案是我一直在寻找的。然而,defaultPrevented
在IE<9.在IE<9?
您可以检查(window.event ? event.defaultPrevented : eventData.isDefaultPrevented()) == false
以捕获传播的事件,这些事件没有返回false
。