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)