知道事件的先前处理程序是否返回 false。默认在 IE < 9 中阻止?



我在应用程序中放入了全局模态"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>

现在,我在标记中有一些组件(我无法控制),它们在onclicks中执行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

相关内容

  • 没有找到相关文章

最新更新