JavaScript跨浏览器单击HTML DOM元素

Sam*_*iew 4 html javascript click onclick

有没有一个可以在HTML DOM元素上触发click事件的vanilla JavaScript跨浏览器函数(包括像div这样的非表单元素)?

Rob*_*obG 6

沿着这条道路走下去的大多数人最终都要开发自己的事件管理系统(这不是那么难但很烦人)或者在可用的功能范围内工作.

如果所有浏览器都支持单个模型(比如说W3C事件模型),那么生活就会很好.但他们没有.不仅如此,一些浏览器拒绝以与"真实"事件相同的方式响应程序化事件.例如,在Firefox中的链接上使用displatchEvent调度click事件不会导致浏览器跟踪链接(但如果有的话,将触发onclick侦听器).大多数其他浏览器将遵循该链接.

IE不支持dispatchEvent到版本8(也许9版),它有fireEvent类似但不同.

HTML5(它还不是标准,也许它永远不会是)已经为HTMLElement接口引入了一个click方法,但它还没有完全实现,不能依赖它.它可能用于您知道或可以控制将使用该页面的浏览器版本的环境.

如果已将侦听器分配给属性或内联,您也可以调用元素的onclick属性,但当然这不像真实事件.

关于clj上dispatchEvent的有用帖子.


Sam*_*iew 3

在 Mozilla 文档上找到了这个难以捉摸的函数: https: //developer.mozilla.org/En/DOM/Document.createEvent,这里也是: http: //javascript.gakaa.com/document-createevent-4-0-5- .aspx

function performClick(node) {
    var evt = document.createEvent("MouseEvents");
    evt.initEvent("mousedown", true, true);
    document.getElementById("myElement").dispatchEvent(evt);
}
Run Code Online (Sandbox Code Playgroud)

  • @Samuel - 并不是每个人都拥有最新的浏览器(很少有典型用户拥有)。IE < 9 不支持 *dispatchEvent*,如果 HTML5 被广泛采用,那么您可以预期 HTMLElement *click* 方法是首选。但有太多正在使用的浏览器不支持它,因此目前它在一般网络上是有用的。此外,浏览器对编程事件的响应可能与对用户发起的事件的响应不同。 (3认同)