2012-12-04 2 views
0

J'ai une fonction qui montrant les progrès de télécharger des fichiers sur le serveur:Comment identifier quel fichier utilise un événement?

function progress(event) { 
... 
} 
... 
for (var i = 0; i<files.length; i++) { 
    xhr.upload.onprogress = progress; 
} 

fonction de progression est en boucle, et exécute une fois pour chaque fichier. En cours de fonction, je veux écrire combien de pourcentages sont téléchargés, je peux le faire pour un fichier, mais si je ne télécharge pas un fichier, alors je ne sais pas comment progresser pour chaque fichier. Puis-je ajouter un paramètre de boucle à la fonction de progression?

Répondre

1

Vous pouvez utiliser une fonction anonyme pour donner paramètre supplémentaire progrès fonction:

function progress(event, file) { 
    ... 
} 

for (var i = 0; i<files.length; i++) { 
    xhr.upload.onprogress = function(event) { 
     progress(event, files[i]); 
    } 
} 

Mais ce code ne fonctionnera pas parce que progrès prendra le dernier fichier point à chaque fois. Pour éviter que vous devez utiliser une fermeture:

function progress(event, file) { 
    ... 
} 

for (var i = 0; i<files.length; i++) { 
    (function(xhr, file) { 
     xhr.upload.onprogress = function(event) { 
      progress(event, file); 
     } 
    })(xhr, files[i]); 
} 

P. S. Désolé, mon premier anwser a eu tort, je l'ai supprimé.

+0

спасибо) mais est-ce que je peux le faire sans fonction anonyme? – iamart

+0

Pour quoi faire? Si vous définissez la fonction _progress_ dans la fermeture, elle aura accès au contexte parent (variables _xhr_ et _file_). Mais je ne pense pas que ce soit une bonne idée dans le cas général: la nouvelle fonction sera créée en mémoire à chaque cycle d'itération. Пожалуйста :) –

Questions connexes