JavaScript 跨浏览器单击 HTML DOM 元素

发布于 2024-11-26 21:20:33 字数 71 浏览 1 评论 0 原文

是否有可用的普通 JavaScript 跨浏览器函数能够触发 HTML DOM 元素(包括 div 等非表单元素)上的单击事件?

Is there a vanilla JavaScript cross-browser function available that is able to trigger a click event on a HTML DOM element (including non-form elements like a div)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

旧伤慢歌 2024-12-03 21:20:33

大多数走这条路的人要么最终开发自己的事件管理系统(这并不难,但很烦人),要么在可用的功能范围内工作。

如果所有浏览器都支持单一模型(例如 W3C 事件模型),那么生活将会很甜蜜。但他们没有。不仅如此,一些浏览器拒绝以与“真实”事件相同的方式响应编程事件。例如,在 Firefox 中的链接上使用 displatchEvent 调度点击事件不会导致浏览器跟踪该链接(但如果有的话,会触发 onclick 侦听器)。大多数其他浏览器都会点击该链接。

IE 版本 8 之前不支持dispatchEvent(也许 9 支持),它有 fireEvent 相似但不同。

HTML5(还不是标准,也许永远不会成为标准)为 点击方法。 html#htmlelement" rel="noreferrer">HTMLElement 接口,但尚未完全实现,不能依赖。它很可能用于您知道或可以控制将使用该页面的浏览器版本的环境。

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

关于dispatchEvent的有用帖子在 clj 上。

Most who go down this path either end up developing their own event managment system (which isn't that hard but is annoying) or work within the available capabilities.

If all browsers supported a single model, (say the W3C event model), life would be sweet. But they don't. And not only that, some browsers refuse to respond to programmatic events the same way as "real" events. e.g. dispatching a click event using displatchEvent on a link in Firefox will not cause the browser to follow the link (but will trigger the onclick listener if there is one). Most other browsers will follow the link.

IE didn't support dispatchEvent up to version 8 (perhaps 9 does), it has fireEvent which is similar but different.

HTML5 (which is not a standard yet, maybe it never will be) has introduced a click method for the HTMLElement interface, however it's not fully implemented yet and can't be relied upon. It can likely be used for environments where you know or can control the browser versions that will be using the page.

You can also just call the element's onclick property if a listener has been assigned to the property or inline, but of course that's not like a real event.

Useful post on dispatchEvent on clj.

兰花执着 2024-12-03 21:20:33

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

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

Found this elusive function on Mozilla documentation: https://developer.mozilla.org/En/DOM/Document.createEvent, and here too: 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);
}
小兔几 2024-12-03 21:20:33
var target = document;//<--(insert your target here);
if(document.createEvent){
  var clickEvent = document.createEvent("MouseEvents");
  clickEvent.initMouseEvent("click", true, true, window, 
    0, 0, 0, 0, 0, false, false, false, 0, null);
  target.dispatchEvent(clickEvent);
}
else{
  target.fireEvent("onclick");
}

摘自MDC event.initMouseEvent 参考这个问题

jsFiddle 您可以在不同的浏览器上进行测试。

var target = document;//<--(insert your target here);
if(document.createEvent){
  var clickEvent = document.createEvent("MouseEvents");
  clickEvent.initMouseEvent("click", true, true, window, 
    0, 0, 0, 0, 0, false, false, false, 0, null);
  target.dispatchEvent(clickEvent);
}
else{
  target.fireEvent("onclick");
}

Taken from the MDC event.initMouseEvent reference and this SO question.

jsFiddle that you can test on different browsers.

谁人与我共长歌 2024-12-03 21:20:33

给定:

<input type="button" id="myButton" onclick="alert('hello world');"/>

以下内容将调用 hello world 提示符:

document.getElementById("myButton").click();

Given:

<input type="button" id="myButton" onclick="alert('hello world');"/>

The following would invoke the hello world prompt:

document.getElementById("myButton").click();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文