JavaScript ile bir tıklama nasıl simüle edilir?

Bir öğeye tıklamayı simüle etmek için JavaScript'i nasıl kullanabileceğimi merak ediyorum.

Şu anda elimde:

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

Ama çalışmıyor :(

Bir fikrin var mı?

Çözüm

İşte hazırladığım şey. Oldukça basit ama işe yarıyor:

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

Kullanım:

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

Tüm tarayıcı algılamalarından kaçınmak için jQuery kullanmayı düşündünüz mü? jQuery ile, bu kadar basit olurdu:

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

En üstteki cevap en iyisidir! Ancak, etype = 'click' olduğunda Firefox'ta benim için fare olaylarını tetiklemiyordu.

Bu yüzden, document.createEvent ifadesini 'MouseEvents' olarak değiştirdim ve bu sorunu çözdü. Ekstra kod, başka bir kod parçasının olaya müdahale edip etmediğini test etmek içindir ve iptal edilirse bunu konsola kaydederim.

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