4

我想要一种通用(跨浏览器)方式让浏览器default action为指定事件执行对象,最好不要让任何附加的侦听器触发

这种问题之前已经被问过,但是在已经在一个事件中的上下文中,和/或严格地谈论在让它稍后发生之前同步地推迟默认操作

基本上,假设您有一个 DOM 元素(您不知道是哪个)变量,并且您想调用 a click,这样如果它是 an anchor,它将跟随它的href,如果它是 aninput[type="submit"]它将提交表单。
但是没有为事件触发该元素的侦听器click(侦听器中可能很容易发生preventDefault()s)。

对于那些需要理由来回答问题的人;如果正在dispatchEvent()为只有fireEvent().
如果默认值没有被“阻止”,这两个函数都会返回true,但dispatchEvent()实际上只会执行并调用默认值。

作为一个附带问题,jQuery 的trigger()目的是做到这一点(尽管在触发侦听器之后)并且是跨浏览器,也许解决方案在那里?与 jQuery 一样好,我想知道它调用的 vanilla 方法(如果它 [这个特殊功能] 确实适用于 IE8 之类的东西)。

4

1 回答 1

1

看来,至少对于click事件,您可以.click()在这些浏览器中调用元素。
这将使元素制定默认值(以及调用所有侦听器和.onclick值,如果已定义)。
我不知道 DOM 元素的任何其他默认值,是否scroll需要考虑?Keypress? 也许那些也作为函数存在,但我还没有测试过。

当我做 test.click()时,我注意到它服从任何返回 false 的侦听器并且没有触发默认值,并且事件确实冒泡(我在文档上的侦听器也被触发了!)。

可能没有其他选择(即直接调用默认值,避免侦听器)。至于向它传递一个事件对象,有问题的浏览器正在进行单个全局事件,所以也许你可以操纵它并且它在执行时不会改变.click()


当我在旅行中找到更多信息时添加:)
此外,还有一个doScroll()函数,但我认为将给定事件翻译成此方法接受的字符串真的很难

于 2013-08-06T01:03:59.170 回答