2010-12-09 3 views
2

J'ai un problème de javascript qui me rend complètement fou. J'ai une collection de données que j'utilise la méthode jQuery .each(). À l'intérieur de la fonction de rappel .each(), je pousse des données sur un tableau. Voici le code.Impossible d'insérer des éléments dans un tableau à partir d'une fonction de rappel anonyme en Javascript

var p = procedure_tool.all(); 
previousValue = -1; 
var proceduresArray = []; 
p.each(function(d, proceduresArray) { 
proceduresArray.push(d.procedureID); 
}); 

J'ai aussi essayé de faire le proceduresArray global (pas var en face), et essayant de ne pas passer par la fonction anonyme.

var p = procedure_tool.all(); 
previousValue = -1; 
proceduresArray = []; 
p.each(function(d) { 
proceduresArray.push(d.procedureID); 
}) 

Les données existe (alertes à l'intérieur du rappel d'affichage il fin). Des idées? J'ai l'impression que c'est une question de portée, mais je pense que la globalisation du tableau l'aurait corrigé.

Merci

Répondre

3

Deux choses,

1- Vous n'avez pas besoin de passer le proceduresArray à la fonction anonyme. 2- La fonction anonyme dans .each() est passée 2 choses. Le premier est l'index de l'élément et le second est l'élément. C'est à dire. callback(indexInArray, valueOfElement)http://http://api.jquery.com/jQuery.each/

Cela devrait fonctionner très bien:

var p = procedure_tool.all(); 
previousValue = -1; 
var proceduresArray = []; 
p.each(function(i, d) { 
proceduresArray.push(d.procedureID); 
}); 

Un autre exemple:

var p = $('div'); 
var pArray = []; 

p.each(function(i, el) 
{ 
    pArray.push(el); 
}); 

console.log(pArray); 

Gardez à l'esprit la valeur peut également être accessible à l'aide this dans la fonction anonyme.

  • Christian
+0

Même si cela n'a pas résolu mon problème directement, il a mis en évidence un autre contrôle. J'utilisais l'itérateur .each (qui est généralement utilisé pour les éléments DOM) au lieu de l'itérateur jQuery.each() qui est censé itérer sur n'importe quel objet. –

Questions connexes