2010-07-14 6 views
6

Je le code JavaScript suivant:arguments de gestionnaire d'événements JavaScript

var ans_el = document.createElement('input'); 
ans_el.setAttribute('id', unique_int_value); 
ans_el.setAttribute('type', 'radio'); 
ans_el.setAttribute('name', 'group'); 
ans_el.setAttribute('value', 'myValue'); 
ans_el.onclick = myFunction(this.id, this.value); 

// Add ans_el to DOM. 

function myFunction(index, value) { // do something } 

Ceci, bien sûr, ne fonctionne pas comme prévu. Au moins pas dans Firefox 3.6. Ce qui se passe est l'événement onclick est déclenché lorsque l'élément est créé et les arguments passés à myFunction sont null. Une fois l'élément ajouté au DOM, l'événement onclick ne se déclenche pas lorsque le bouton radio est sélectionné. Je serais reconnaissant si quelqu'un a un aperçu de ce qui se passe ici, et/ou comment ajouter dynamiquement des gestionnaires d'événements peut être accompli.

Répondre

11

Vous devez donner une référence à une fonction pour onclick; vous exécutez actuellement la fonction et attribuez ce résultat au gestionnaire onclick. Ceci est plus proche de ce que vous voulez:

ans_el.onclick = function(e) { 
    myFunction(ans_el.id, ans_el.value); 
}; 

MISE À JOUR: Nous avons décidé d'utiliser event.target pour un exemple plus clair depuis Andir en a parlé.

ans_el.onclick = function(e) { 
    myFunction(e.target.id, e.target.value); 
}; 
+5

Vous pouvez également obtenir l'ID/valeur de l'objet e.target. (e.target.id ...) – Andir

+0

Merci pour la réponse rapide. J'ai fait quelque chose de similaire qui semble fonctionner: ans_el.setAttribute ('onclick', 'myFunc (this.id, this.value)'); Je l'ai seulement testé en FF, je suis sûr qu'Internet Explorer aura besoin d'un sautillement phénoménal pour accomplir la même chose. Je suis très tenté de dire à mes utilisateurs que I.E. ne sera pas supporté. – Bruce

+0

Cela fonctionnera, mais l'utilisation de chaînes de code js pour être évaluées comme ça est généralement désapprouvée. Il est généralement lent, bogué et présente un certain nombre de problèmes de sécurité. Voir http://stackoverflow.com/questions/197769/when-is-javascripts-eval-not-evil/198031#198031 – sunetos

Questions connexes