Javascript 知道事件的前一个处理程序是否返回false。在IE<;9?
我在应用程序中设置了一个全局模式“加载,请稍候”。每次出现Javascript 知道事件的前一个处理程序是否返回false。在IE<;9?,javascript,html,event-handling,onclick,event-bubbling,Javascript,Html,Event Handling,Onclick,Event Bubbling,我在应用程序中设置了一个全局模式“加载,请稍候”。每次出现时都会显示它 但我无法控制这一部分,所以:有没有一种方法(最好是非jquery+跨浏览器)可以知道事件处理程序先前执行的结果(在较低级别) 如果没有,我想只要当组件的onclick包含return false时,我就必须避免显示模式 这是一个测试的例子 使现代化 贝基下面的答案就是我一直在寻找的。但是,defaultPrevented在IE
时都会显示它
但我无法控制这一部分,所以:有没有一种方法(最好是非jquery+跨浏览器)可以知道事件处理程序先前执行的结果(在较低级别)
如果没有,我想只要当组件的onclick
包含return false
时,我就必须避免显示模式
这是一个测试的例子
使现代化
贝基下面的答案就是我一直在寻找的。但是,defaultPrevented
在IE<9中似乎不受支持。在IE<9中是否有一个等效的/解决方法来实现这一点?您可以检查(window.event?event.defaultPrevented:eventData.isDefaultPrevented())==false
来捕获未返回的传播事件false在可单击元素上是否有任何通用模式来识别它们,或者您无法控制的可单击元素的任何常见模式?除了clickedElement.onclick.toString().indexOf('return false')之外,没有其他模式可供查找-1
。遗憾的是,这不是很推荐,因为函数反编译不是有效ECMAScript实现的要求,我的意思是,标准不要求浏览器在执行某个函数时为您提供函数的字符串转换。toString()。。。我所能想到的就是查看event.target,如果nodeName不是“A”,请查看parentNode、parentNode、parentNode等,直到其nodeName是“A”,然后检查onclick是否为null,或者直到到达主体。但是如果你想在你自己的链接元素中使用onclick,这是行不通的。。。还有什么可以帮助我们的建议吗?;)谢谢你的评论,@xel。在someConditions
中,我已经在从事件目标中查找层次结构,以查找是我要查找的。但是,IE<9似乎不支持defaultPrevented
。谢谢您的回答。我在中尝试过,但是isDefaultPrevented
(顺便说一句,它似乎不是函数)总是未定义的。另外,谢谢你告诉我关于defaultPrevented
:)呃,对非W3标准浏览器(你知道我的意思)-奇怪的是,它不适用于该浏览器(这里是IE7)。还尝试了returnValue
,如前所述,但该值在冒泡后似乎不可用。似乎只有在中才支持defaultPrevented
。我暂时不接受,以防出现另一个答案,但这就是我一直在寻找的答案。
<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>