如何用JavaScript来模拟点击?

我只是想知道如何使用JavaScript来模拟对一个元素的点击。

目前我有。

<script type="text/javascript">
function simulateClick(control)
{
    if (document.all)
    {
        control.click();
    }
    else
    {
        var evObj = document.createEvent('MouseEvents');
        evObj.initMouseEvent('click', true, true, window, 1, 12, 345, 7, 220, false, false, true, false, 0, null );
        control.dispatchEvent(evObj);
    }
}
</script>

<a href="http://www.google.com" id="mytest1">test 1</a><br>

<script type="text/javascript">
    simulateClick(document.getElementById('mytest1'));
</script>

但它不工作 :(

有什么想法吗?

解决办法

这就是我所做的。这很简单,但它很有效。

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);
  }
}

用法。

eventFire(document.getElementById('mytest1'), 'click');
评论(21)

你是否考虑过使用jQuery来避免所有的浏览器检测? 有了jQuery,就会像这样简单。

$("#mytest1").click();
评论(8)

最上面的答案是最好的!然而,在Firefox中,当etype = 'click'时,它没有为我触发鼠标事件。

所以,我把document.createEvent改为'MouseEvents',这就解决了问题。额外的代码是为了测试是否有另一点代码干扰了该事件,如果它被取消了,我将把它记录到控制台。

function eventFire(el, etype){
  if (el.fireEvent) {
    el.fireEvent('on' + etype);
  } else {
    var evObj = document.createEvent('MouseEvents');
    evObj.initEvent(etype, true, false);
    var canceled = !el.dispatchEvent(evObj);
    if (canceled) {
      // A handler called preventDefault.
      console.log("automatic click canceled");
    } else {
      // None of the handlers called preventDefault.
    } 
  }
}
评论(0)