2

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

<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的 s. confirm()这导致模态弹出窗口显示并在有 a并且用户拒绝时停留在那里。处理这个问题的正确方法可能是preventDefault(),这样事件就不会冒泡,正如event.preventDefault() 与 return false中所解释的那样。

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

如果没有,我想我只需要<div>在组件的onclickcontains时避免显示模态return false

这是一个用于测试的JSFiddle

更新

Bergi 下面的答案是我正在寻找的。但是,defaultPrevented在 IE < 9 中似乎不支持。在 IE < 9 中是否有等效/解决方法来实现这一点?

4

1 回答 1

1

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

于 2012-09-28T13:54:28.743 回答