调用对象上特定事件的默认操作。

4

我想要一种通用的(跨浏览器)方法来获取浏览器执行对象的指定事件的默认行为,最好不要触发任何已附加的监听器。

这种类型的问题以前已经被问过了,但是在已经处于一个事件中的情况下,和/或者严格地讲述延迟默认操作直到稍后发生

基本上,假设您有一个DOM元素(您不知道哪个)变量,并且您想调用click,使得如果它是anchor,它会遵循其href,如果它是input[type="submit"],它将提交表单。但是,不能触发该元素的click事件的监听器(其中可能包含preventDefault()的内容)。

对于那些需要回答问题的人来说;如果您正在为仅支持fireEvent()的浏览器实现dispatchEvent()之类的东西,您可能希望这样做。
两个函数都会返回true,如果默认值没有被"prevented",但是只有dispatchEvent()实际上会跟进并调用默认值。

作为一个侧面问题,jQuery 的trigger()旨在完成此操作(尽管在触发监听器之后),并且可以跨浏览器使用,也许解决方案就在那里?虽然 jQuery 很好,但我想知道它所调用的原始方法(如果它确实可以在诸如 IE8 之类的浏览器上运行的话)。


+1 针对写得好的问题 :-) - Bergi
1个回答

1
至少对于“click”事件,您可以在这些浏览器中在元素上调用“.click()”。这将使元素执行默认操作(以及调用所有侦听器和“.onclick”值(如果定义))。我不知道DOM元素的任何其他默认值,是否需要考虑“scroll”?“Keypress”?也许那些也存在作为函数,但我还没有测试过。
当我测试“.click()”时,我注意到它遵守任何返回false的侦听器,并且不触发默认操作,事件会冒泡(我在document上有一个侦听器也被触发!)。
可能没有其他选择(即直接调用默认操作,避免侦听器)。至于传递事件对象,相关浏览器具有单个全局事件的情况,因此您可以操纵该事件,当执行“.click()”时它不会改变。

在我的旅行中发现更多信息时会添加 :)
此外,有一个doScroll()函数,但我认为将给定事件转换为此方法接受的字符串会非常困难。


.click() 是原生方法,不是 jQuery。 - Hashbrown

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接