代码之家  ›  专栏  ›  技术社区  ›  Bruce

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

  •  50
  • Bruce  · 技术社区  · 15 年前

    在IE中,我可以从javascript中调用element.click()——我如何在Firefox中完成相同的任务?理想情况下,我想要一些在跨浏览器中同样有效的javascript,但是如果必要的话,我会有不同的每浏览器javascript。

    7 回复  |  直到 15 年前
        1
  •  58
  •   Iulian Onofrei Denis Oliveira    10 年前

    这个 document.createEvent documentation 说:“ 这个 创建事件 方法已弃用。使用 event constructors 相反。

    因此,您应该改为使用此方法:

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

    然后在这样的元素上触发它:

    element.dispatchEvent(clickEvent);
    

    如图所示 here .

        2
  •  30
  •   Sachin Jain    9 年前

    对于火狐来说,链接似乎是“特殊的”。我唯一能做这项工作的方法就是使用CreateEvent described here on MDN 并调用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;
        }
    }
    
        3
  •  21
  •   davetron5000    15 年前

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

    $("a").click();
    

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

        4
  •  10
  •   Bjorn    15 年前

    element.click()是由 W3C DOM specification . Mozilla的Gecko/Firefox follows the standard 并且只允许对输入元素调用此方法。

        5
  •  8
  •   jiggy    15 年前

    你真的想跟踪链接还是触发onclick?您可以通过如下方式触发onclick:

    var link = document.getElementById(linkId);
    link.onclick.call(link);
    
        6
  •  7
  •   KooiInc    15 年前

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

    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);
        }
    }
    
        7
  •  1
  •   Samuel Liew cicero lopes    11 年前

    我使用了上面列出的Kooiinc函数,但我必须使用两种不同的输入类型:一种是IE的“按钮”,另一种是火狐的“提交”。我不清楚为什么,但它起作用了。

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