Javascript 当父元素阻止冒泡时,单击未激发的事件

Javascript 当父元素阻止冒泡时,单击未激发的事件,javascript,event-handling,cross-browser,nested,event-bubbling,Javascript,Event Handling,Cross Browser,Nested,Event Bubbling,我在一些现代浏览器中进行了测试,结果不一致。我确信这与捕获和冒泡事件支持差异有关。我已经在这里设置了一个测试环境来复制这个问题:并使用它来运行实时预览 问题在于:当祖先阻止冒泡时,一些浏览器会忽略锚href click事件。这没有意义,因为中间元素将在事件冒泡之前触发事件,而锚元素则不会。为什么javascript单击事件可以工作,而href事件不能工作 以下是按下“单击我”时的结果: Chrome 9.0.597.98:href被忽略+内部和外部打印 IE 8.0.6001.19019:hre

我在一些现代浏览器中进行了测试,结果不一致。我确信这与捕获和冒泡事件支持差异有关。我已经在这里设置了一个测试环境来复制这个问题:并使用它来运行实时预览

问题在于:当祖先阻止冒泡时,一些浏览器会忽略锚href click事件。这没有意义,因为中间元素将在事件冒泡之前触发事件,而锚元素则不会。为什么javascript单击事件可以工作,而href事件不能工作

以下是按下“单击我”时的结果:

Chrome 9.0.597.98:href被忽略+内部和外部打印

IE 8.0.6001.19019:href works+内部和外部打印

Firefox 3.6.13:href被忽略+内部和外部打印

所以我的最终问题是:当祖先元素阻止事件冒泡时,如何让href跨浏览器工作?如有任何见解,将不胜感激

编辑:


我只想指出,在波蒂的评论中,讨论仍在继续,我也要感谢他的巨大帮助

问题是它不是

event.returnResult = false;
在IE中,它是:

event.returnValue = false;
该链接在IE中通过,因为您没有正确地告诉浏览器不要执行默认操作


如果希望执行默认操作,则不要调用“.preventDefault()”,也不要将“returnValue”设置为
false

啊!谢谢你的回复,你是对的,这是returnValue。不知道我怎么会错过这个。我仍然希望有人能提供一个实际的解决方案。看看代码,其实是一样的。
上的事件处理程序调用事件对象上的“preventDefault()。您应该理解,传递给处理程序的事件对象对于所有处理程序都是相同的——换句话说,只有一个事件对象,并且它被传递给DOM中每个容器元素的处理程序。如果任何处理程序调用“preventDefault()”(或将IE的“returnValue”设置为
false
),那么默认操作将不会执行。好的,这更容易理解:-)正如我所写的,问题是您的代码仍然在事件对象上将“returnValue”设置为
false
。对于发生的任何一次“单击”,只有一个事件对象,并且在冒泡时将同一对象传递给所有事件处理程序。如果任何处理程序将“returnValue”设置为
false
,则默认操作不会发生。是的,没错-“stopPropagation”使冒泡进程停止,如果未阻止默认操作,则会在处理程序退出后立即发生。