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

Bru*_*uce 59 javascript firefox dom dhtml javascript-events

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

Iul*_*rei 71

document.createEvent文件说:" createEvent方法已被弃用.使用事件构造来代替. "

所以你应该使用这种方法:

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

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

element.dispatchEvent(clickEvent);
Run Code Online (Sandbox Code Playgroud)

如图所示这里.

  • 唯一一个在firefox和chrome中都适合我的人 (7认同)
  • 不适用于动态添加的元素 (2认同)
  • 是的,这个:/sf/ask/56634021/?noredirect=1#comment618935_809108。 (2认同)

wil*_*ill 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 它是如何与window.open(element.href,element.target)不同的 - 在我的Firefox上它的工作方式完全相同,并显示丑陋的黄色条 (2认同)

Jak*_*raw 22

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

$("a").click();
Run Code Online (Sandbox Code Playgroud)

这将"点击"页面上的所有锚点.

  • 正如一个音符,当HREF使用的onclick这项工作,例如,使用这种格式`<a href="javascript:someFunction()">当`<a onclick="someFunction()>点击我</A>`但不点击我</a>` (17认同)

Bjo*_*orn 10

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

  • 当我想以编程方式模拟非INPUT元素的点击时,理解但无用. (5认同)

jig*_*ggy 8

您是否尝试实际关注链接或触发onclick?您可以使用以下内容触发onclick:

var link = document.getElementById(linkId);
link.onclick.call(link);
Run Code Online (Sandbox Code Playgroud)

  • 您不需要指定上下文; 因为onclick是'link'的属性,所以上下文已经被适当地设置. (3认同)
  • 这在Chrome中无效.控制台中抛出一个错误,说方法"call"不存在. (2认同)

Koo*_*Inc 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);
    }
}
Run Code Online (Sandbox Code Playgroud)