46 votes

Est-il possible de déclencher l'événement de clic d'un lien (ou de tout élément) par le biais de JavaScript ?

J'écris un code JavaScript qui doit déclencher la fonction click pour un lien. Dans Internet Explorer, je peux faire ceci

var button = document.getElementById('myButton');
button.click();

Mais cela ne fonctionne pas dans Firefox, et je suppose dans tout autre navigateur. Dans Firefox, j'ai fait ceci

var button = document.getElementById('myButton');
window.location = button.href;

J'ai l'impression que ce n'est pas la meilleure façon de faire. Existe-t-il un meilleur moyen de déclencher un click événement ? De préférence, quelque chose qui fonctionne quel que soit le type d'élément ou le navigateur.

73voto

Chris MacDonald Points 3261

http://jehiah.cz/archive/firing-javascript-events-properly

function fireEvent(element,event) {
   if (document.createEvent) {
       // dispatch for firefox + others
       var evt = document.createEvent("HTMLEvents");
       evt.initEvent(event, true, true ); // event type,bubbling,cancelable
       return !element.dispatchEvent(evt);
   } else {
       // dispatch for IE
       var evt = document.createEventObject();
       return element.fireEvent('on'+event,evt)
   }
}

2voto

Andrew Hedges Points 11496

Je ne le recommande pas, mais vous pouvez appeler l'attribut onclick d'un élément HTML comme une méthode.

<a id="my-link" href="#" onclick="alert('Hello world');">My link</a>

document.getElementById('my-link').onclick();

1voto

Vinko Vrsalovic Points 116138

Ce n'est généralement pas possible, à ce jour, Mozilla dispose de l'option cliquez() mais pour les éléments d'entrée uniquement, pas pour les liens.

Pourquoi ne pas créer une fonction que le bouton appellera dans le gestionnaire onClick et, chaque fois que vous voulez "cliquer" sur le bouton, appeler la fonction à la place ?

0voto

unexist Points 1647

Mozilla a une politique plus stricte concernant les actions/événements JS autorisés. J'ai eu des problèmes similaires avec l'événement click(). Il est désactivé sur certains éléments pour éviter les XSS.

Qu'y a-t-il de mal à rediriger le navigateur ? Cela devrait fonctionner partout.

-1voto

Je ne veux pas déterrer un vieux fil de discussion, mais je cherchais une réponse à ce même problème et j'ai trouvé une fonction nouvelle dans jQuery 1.3x (j'avais un problème avec le contenu chargé par Ajax).

Voici comment je l'ai mis en œuvre :

HTML

<a class="navlink" href="mypage.html">Online Estimate</a>

CHARGÉ script

$(".pagelink").click(function(){
    $(".navlink[href="+$(this).attr("href")+"]").trigger('click');
    return false;
});

LOADED HTML

<a class="pagelink" href="mypage.html">Online Estimate</a>

La fonction est l'"événement déclencheur"...
Plus de détails à ce sujet ici : http://docs.jquery.com/Events/trigger#eventdata

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X