Comment simuler un clic avec JavaScript?

Je me demande juste comment je peux utiliser JavaScript pour simuler un clic sur un élément.

Actuellement, j'ai:

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

Mais ça ne marche pas: (

Des idées?

204
demandé sur Andrey Chaschev 2010-04-24 22:10:30

6 réponses

Voici ce que j'ai cuisiné. C'est assez simple, mais ça marche:

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

Utilisation:

eventFire(document.getElementById('mytest1'), 'click');
328
répondu KooiInc 2015-09-12 18:10:10

Qu'en est-il de quelque chose de simple comme:

document.getElementById('elementID').click();

Pris en charge même par IE.

242
répondu Darren Sweeney 2016-10-20 11:53:12

Avez-vous envisagé d'utiliser jQuery pour éviter toute détection de navigateur? Avec jQuery, ce serait aussi simple que:

$("#mytest1").click();
62
répondu BradBrening 2010-04-24 18:12:47

Vous pourriez vous économiser un tas d'espace en utilisant jQuery. Vous avez seulement besoin d'utiliser:

$('#myElement').trigger("click")
12
répondu Adam Salma 2016-01-24 17:12:39
var elem = document.getElementById('mytest1');

// Simulate clicking on the specified element.
triggerEvent( elem, 'click' );

/**
 * Trigger the specified event on the specified element.
 * @param  {Object} elem  the target element.
 * @param  {String} event the type of the event (e.g. 'click').
 */
function triggerEvent( elem, event ) {
  var clickEvent = new Event( event ); // Create the event.
  elem.dispatchEvent( clickEvent );    // Dispatch the event.
}

Référence

7
répondu mnishiguchi 2016-05-30 21:36:55

La meilleure réponse est la meilleure! Cependant, cela ne déclenchait pas d'événements de souris pour moi dans Firefox when etype = 'click'.

Donc, j'ai changé le document.createEvent en 'MouseEvents' et cela a résolu le problème. Le code supplémentaire est de tester si un autre bit de code interférait avec l'événement, et s'il était annulé, je le connecterais à la console.

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.
    } 
  }
}
6
répondu brianlmerritt 2015-09-13 00:08:19