73

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

4

7 回答 7

94

document.createEvent文档说“不推荐使用createEvent方法。请改用事件构造函数

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

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

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

element.dispatchEvent(clickEvent);

如此处所示。

于 2014-03-18T02:07:46.970 回答
30

对于 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;
    }
}
于 2009-04-30T23:42:52.977 回答
23

使用jQuery你可以做同样的事情,例如:

$("a").click();

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

于 2009-04-30T21:10:00.910 回答
12

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

于 2009-04-30T21:12:20.313 回答
8

您是在尝试实际关注链接还是触发 onclick?您可以通过以下方式触发 onclick:

var link = document.getElementById(linkId);
link.onclick.call(link);
于 2009-04-30T21:13:47.283 回答
7

这是一个跨浏览器工作功能(也可用于点击处理程序以外的其他):

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);
    }
}
于 2009-04-30T21:27:34.363 回答
1

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

// HTML

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

// 在 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 一起工作,但现在这将是一种奢侈,等到下一个问题。

于 2013-02-20T12:29:51.883 回答