我想要一种通用(跨浏览器)方式让浏览器为指定事件的对象执行default action
,最好不要让任何连接的侦听器触发。
以前曾在already being in an event,& /或严格谈论synchronously holding off the default action before letting it happen later的背景下提出过这类问题。
基本上,假设您有一个DOM元素(您不知道哪个)变量,并且您想要调用click
,这样如果它是anchor
,它就会跟随它的href
如果是input[type="submit"]
则会提交表单
但是没有为click
事件触发该元素的侦听器(在侦听器中可能倾向于preventDefault()
)。
对于那些需要理由回答问题的人;如果您为只有dispatchEvent()
的浏览器实施fireEvent()
之类的内容,可能想要这样做。
如果默认值未被“阻止”,则两个函数都返回true
,但实际上只有dispatchEvent()
后跟并调用默认值。
作为一个附带问题,jQuery的trigger()
是为了做到这一点(虽然在触发了听众之后)并且是跨浏览器,也许解决方案就在那里?和jQuery一样好,我想知道它调用的vanilla方法(如果它[这个特殊功能]确实适用于像IE8这样的东西)。
答案 0 :(得分:1)
看来,至少对于click
事件,您可以在这些浏览器中的元素上调用.click()
。
这将使元素成为默认值(以及调用所有侦听器和.onclick
值,如果已定义)。
我不知道DOM元素的任何其他默认值,是否需要考虑scroll
? Keypress
?也许那些作为函数存在,但我还没有测试过。
当我测试.click()
时,我注意到它听从任何返回false的侦听器并且没有触发默认值,并且事件确实起泡(我在文档上的监听器也被解雇了!)。
可能没有其他选择(即直接调用默认值,避免使用侦听器)。至于传递一个事件对象,有问题的浏览器会发生单个全局事件,所以也许你可以操作它,并且在执行.click()
时它不会改变。
添加,因为我在旅行中找到更多信息:)
此外,还有doScroll()
函数,但我认为将给定事件转换为此方法接受的字符串真的很难