Wie simuliert man einen Klick mit JavaScript?

I'm nur fragen, wie ich JavaScript verwenden können, um einen Klick auf ein Element zu simulieren.

Derzeit habe ich:

<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>

Aber es's nicht funktionieren :(

Irgendwelche Ideen?

Lösung

Hier's, was ich gekocht. Es ist ziemlich einfach, aber es funktioniert:

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

Verwendung:

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

Haben Sie schon einmal darüber nachgedacht, jQuery zu verwenden, um die ganze Browser-Erkennung zu umgehen? Mit jQuery, wäre es so einfach wie:

$("#mytest1").click();
Kommentare (8)

Die oberste Antwort ist die beste! Allerdings war es nicht auslösen Maus-Ereignisse für mich in Firefox, wenn etype = 'click'.

Also änderte ich document.createEvent in 'MouseEvents' und damit war das Problem behoben. Der zusätzliche Code dient dazu, zu testen, ob ein anderes Stück Code das Ereignis stört, und wenn es abgebrochen wurde, würde ich das in der Konsole protokollieren.

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.
    } 
  }
}
Kommentare (0)