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

时间:2013-08-05 04:20:31

标签: javascript javascript-events

我想要一种通用(跨浏览器)方式让浏览器为指定事件的对象执行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这样的东西)。

1 个答案:

答案 0 :(得分:1)

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

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

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


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