2012-03-01 4 views
1

Si je fais ce qui suit, la variable est passée à l'écouteur d'événement attaché où je veux la valeur de la variable au moment de l'ajout de l'écouteur d'événement. Il doit donc alerter "a" et non "b"; il doit donc alerter "a" et non "b";Valeurs de passe Javascript pour fonctionner sur l'écouteur d'événement

+0

Qu'en est-il de créer une copie de la valeur lorsque l'écouteur d'événement est ajouté? –

+0

Il doit être statique car un certain nombre de boutons seront créés. – user1209203

+0

le script a raison d'alerter "b" et non "a", car au moment où l'utilisateur clique, foo a déjà la valeur "b"; ce que vous avez là avec addEventListener est que vous assignez une fonction à cet événement, donc quand l'événement est déclenché la fonction est exécutée – Liviu

Répondre

7

quelque chose comme:

var foo = 'a';  

document 
.getElementById('foo') 
.addEventListener('click', function(bar) { 

    // return the actual event handler function 
    return function() { 
    doSomething(bar); 
    }; 

}(foo) /* <-- call the anonymous function, passing in the current foo*/, false); 

foo = 'b'; 

function doSomething (val) { 
    alert(val); 
}​ 

demo: http://jsfiddle.net/gS9wu/1/

+0

wow gold star pour vous! – user1209203

0

Étant donné que foo est global, foo est écrasé sur la ligne 3 avant la détection de l'événement.

Vous pouvez envisager aller chercher la valeur de foo et de le stocker sur un objet ou dans un plug-in ou similaire à abstraire loin de votre flux de code normal ou de passer dans la fonction de rappel:

Document

. addEventListener ('mousedown', (function (outerFoo) {fait quelque chose (outerFoo);}) (foo), false);

Questions connexes