如何以编程方式单击 JavaScript 中的元素?

发布于 2024-07-18 14:21:39 字数 157 浏览 6 评论 0原文

在 IE 中,我可以从 JavaScript 调用 element.click() - 如何在 Firefox 中完成相同的任务? 理想情况下,我希望有一些可以在跨浏览器上同样工作的 JavaScript,但如果有必要,我将为此使用不同的每个浏览器 JavaScript。

In IE, I can just call element.click() from JavaScript - how do I accomplish the same task in Firefox? Ideally I'd like to have some JavaScript that would work equally well cross-browser, but if necessary I'll have different per-browser JavaScript for this.

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

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

发布评论

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

评论(7

错々过的事 2024-07-25 14:21:39

document.createEvent 文档 说“< strong>createEvent 方法已弃用。使用事件构造函数。 ”

所以你应该改用这个方法:

var clickEvent = new MouseEvent("click", {
    "view": window,
    "bubbles": true,
    "cancelable": false
});

并在这样的元素上触发它:

element.dispatchEvent(clickEvent);

如图所示 此处

The document.createEvent documentation says that "The createEvent method is deprecated. Use event constructors instead."

So you should use this method instead:

var clickEvent = new MouseEvent("click", {
    "view": window,
    "bubbles": true,
    "cancelable": false
});

and fire it on an element like this:

element.dispatchEvent(clickEvent);

as shown here.

倾城°AllureLove 2024-07-25 14:21:39

对于 Firefox 链接似乎是“特殊的”。 我能够完成这项工作的唯一方法是使用 MDN 上描述的 createEvent 并调用 initMouseEvent 函数。 即使这并没有完全起作用,我不得不手动告诉浏览器打开链接......

var theEvent = document.createEvent("MouseEvent");
theEvent.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
var element = document.getElementById('link');
element.dispatchEvent(theEvent);

while (element)
{
    if (element.tagName == "A" && element.href != "")
    {
        if (element.target == "_blank") { window.open(element.href, element.target); }
        else { document.location = element.href; }
        element = null;
    }
    else
    {
        element = element.parentElement;
    }
}

For firefox links appear to be "special". The only way I was able to get this working was to use the createEvent described here on MDN and call the initMouseEvent function. Even that didn't work completely, I had to manually tell the browser to open a link...

var theEvent = document.createEvent("MouseEvent");
theEvent.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
var element = document.getElementById('link');
element.dispatchEvent(theEvent);

while (element)
{
    if (element.tagName == "A" && element.href != "")
    {
        if (element.target == "_blank") { window.open(element.href, element.target); }
        else { document.location = element.href; }
        element = null;
    }
    else
    {
        element = element.parentElement;
    }
}
千里故人稀 2024-07-25 14:21:39

使用 jQuery 您可以做完全相同的事情,例如:

$("a").click();

这将“单击”页面上的所有锚点。

Using jQuery you can do exactly the same thing, for example:

$("a").click();

Which will "click" all anchors on the page.

那片花海 2024-07-25 14:21:39

element.click() 是 W3C DOM 规范。 Mozilla 的 Gecko/Firefox 遵循标准并且只允许在 INPUT 上调用此方法元素。

element.click() is a standard method outlined by the W3C DOM specification. Mozilla's Gecko/Firefox follows the standard and only allows this method to be called on INPUT elements.

想念有你 2024-07-25 14:21:39

这是一个跨浏览器工作函数(也可用于除单击处理程序之外的其他情况):

function eventFire(el, etype){
    if (el.fireEvent) {
      el.fireEvent('on' + etype);
    } else {
      var evObj = document.createEvent('Events');
      evObj.initEvent(etype, true, false);
      el.dispatchEvent(evObj);
    }
}

Here's a cross browser working function (usable for other than click handlers too):

function eventFire(el, etype){
    if (el.fireEvent) {
      el.fireEvent('on' + etype);
    } else {
      var evObj = document.createEvent('Events');
      evObj.initEvent(etype, true, false);
      el.dispatchEvent(evObj);
    }
}
孤蝉 2024-07-25 14:21:39

您是否尝试实际点击链接或触发 onclick? 您可以通过以下方式触发 onclick:

var link = document.getElementById(linkId);
link.onclick.call(link);

Are you trying to actually follow the link or trigger the onclick? You can trigger an onclick with something like this:

var link = document.getElementById(linkId);
link.onclick.call(link);
浪荡不羁 2024-07-25 14:21:39

我使用了上面列出的 KooiInc 功能,但我必须使用两种不同的输入类型,一种用于 IE 的“按钮”,另一种用于 FireFox 的“提交”。 我不太清楚为什么,但它有效。

// HTML

<input type="button" id="btnEmailHidden" style="display:none" />
<input type="submit" id="btnEmailHidden2" style="display:none" />

// in JavaScript

var hiddenBtn = document.getElementById("btnEmailHidden");

if (hiddenBtn.fireEvent) {
    hiddenBtn.fireEvent('onclick');
    hiddenBtn[eType]();
}
else {
    // dispatch for firefox + others
    var evObj = document.createEvent('MouseEvent');
    evObj.initEvent(eType, true, true);
    var hiddenBtn2 = document.getElementById("btnEmailHidden2");
    hiddenBtn2.dispatchEvent(evObj);
}

我已经搜索并尝试了很多建议,但这就是最终的工作。 如果我有更多时间,我会想调查一下为什么提交适用于 FF 和按钮适用于 IE,但现在这将是一种奢侈,所以下一个问题。

I used KooiInc's function listed above but I had to use two different input types one 'button' for IE and one 'submit' for FireFox. I am not exactly sure why but it works.

// HTML

<input type="button" id="btnEmailHidden" style="display:none" />
<input type="submit" id="btnEmailHidden2" style="display:none" />

// in JavaScript

var hiddenBtn = document.getElementById("btnEmailHidden");

if (hiddenBtn.fireEvent) {
    hiddenBtn.fireEvent('onclick');
    hiddenBtn[eType]();
}
else {
    // dispatch for firefox + others
    var evObj = document.createEvent('MouseEvent');
    evObj.initEvent(eType, true, true);
    var hiddenBtn2 = document.getElementById("btnEmailHidden2");
    hiddenBtn2.dispatchEvent(evObj);
}

I have search and tried many suggestions but this is what ended up working. If I had some more time I would have liked to investigate why submit works with FF and button with IE but that would be a luxury right now so on to the next problem.

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