51 votes

Comment changer dynamiquement le gestionnaire onClick?

Je suis sûr qu'il y a un million de messages à propos de ce là-bas, mais, étonnamment, je vais avoir du mal à trouver quelque chose.

J'ai un script simple où je veux mettre le onClick gestionnaire pour un <A> lien lors de l'initialisation de la page.

Lorsque je l'exécute j'ai immédiatement obtenir un 'foo' alerte boîte où je m'attendais à ne recevoir une alerte lorsque je clique sur le lien.

Ce stupide chose que je fais mal? (J'ai essayé sur= et onClick=)...

<script language="javascript">

    function init(){

        document.getElementById("foo").click = new function() { alert('foo'); };
    }

</script>

<body onload="init()">
    <a id="foo" href=#>Click to run foo</a>
</body>

Edit: j'ai changé mes accepté de répondre à un jQuery réponse. La réponse par"Már Örlygsson' est techniquement la bonne réponse à ma question initiale (click devrait être onclick et new doit être enlevé) mais je déconseille vivement à quiconque de l'aide de document.getElementById(...) directement dans leur code et à l'utilisation de jQuery à la place.

69voto

CMS Points 315406

Essayer:

 document.getElementById("foo").onclick = function (){alert('foo');};
 

35voto

Már Örlygsson Points 6861

Utilisez .onclick (toutes en minuscules). Ainsi:

 document.getElementById("foo").onclick = function () {
  alert('foo'); // do your stuff
  return false; // <-- to suppress the default link behaviour
};
 

En fait, vous aurez probablement intérêt à utiliser une bonne bibliothèque (je recommande jQuery pour plusieurs raisons) et à écrire du javascript propre.

Les compatibilités entre navigateurs sont un bon enfer pour quiconque - encore moins pour quelqu'un qui vient de commencer.

23voto

Darryl Hein Points 33819

jQuery:

 $('#foo').click(function() { alert('foo'); });
 

Ou si vous ne voulez pas qu'il suive le lien href:

 $('#foo').click(function() { alert('foo'); return false; });
 

10voto

yuttadhammo Points 1562

Si vous souhaitez transmettre des variables de la fonction actuelle, vous pouvez par exemple:

 document.getElementById("space1").onclick = new Function("lrgWithInfo('"+myVar+"')");
 

Si vous n'avez pas besoin de transmettre des informations à partir de cette fonction, c'est simplement:

 document.getElementById("space1").onclick = new Function("lrgWithInfo('13')");
 

10voto

Selin Ebeci Points 41

L’autre jour, j’ai essayé plus ou moins de donner une action dynamique à un bouton, mais je n’étais pas encore en mesure de trouver une solution efficace avant d’essayer celui-ci. Je considère que c'est identique pour le lien. Le voilà:

var submitButton = document.getElementById ('submitButton'); submitButton.setAttribute ('onclick', 'alert ("bonjour");');

A bientôt, Selin Ebeci

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