javascript - 了解事件的前一个处理程序是否返回 false。 IE < 9 中的默认阻止?

标签 javascript html event-handling onclick event-bubbling

我已经放置了一个全局模式“正在加载,请稍候”<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() 时停留在那里。并且用户否认。处理这个问题的正确方法可能是 preventDefault() ,这样事件就不会冒泡,如 event.preventDefault() vs. return false 中所述。 。

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

如果没有,我想我就不得不避免显示模式 <div>每当组件的 onclick包含return false .

这是一个JSFiddle用于测试。

更新

下面伯吉的答案就是我一直在寻找的。然而,defaultPrevented IE < 9 似乎不支持。是否有等效/解决方法可以在 IE < 9 中实现此目的?

最佳答案

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

关于javascript - 了解事件的前一个处理程序是否返回 false。 IE < 9 中的默认阻止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17764190/

相关文章:

javascript - knockout JS : Handle event capture phase

c# 事件处理程序被添加两次

javascript - 循环不应在遇到无效语句时中断

php - 在 JavaScript 弹出窗口中显示图像标题?

javascript - Excel-JS - 重新计算不起作用

javascript - 如果日期月份等于输入的隐藏值,则更改 div

javascript - meteor 按钮上的切换图标

struct - 同时改变多个结构字段的最快惯用方法是什么?

javascript - Masonry 的响应式布局在较宽的页面尺寸上有较大的间距

javascript - 单击时无法切换动画