HTML5 Datei-Upload mit mehreren Balken
Ich bin das hochladen mehrerer Dateien per XmlHTTPRequest und HTML5. Ich habe das hochladen funktioniert Prima, aber ich würde gerne eine Fortschrittsanzeige für jede Datei hochladen geht. Den code habe ich, aber nutzt die letzten Fortschrittsbalken für ALLE Datei-uploads und nicht jeder laden mit seiner eigenen Fortschrittsbalken. So dies ist vor allem visuell auf der client-Seite, aber es ist wirklich ärgerlich mich. Für einige Grund ich ' m, vorausgesetzt, dass das Ereignis, misst den Fortschritt des Datei-upload überschreibt sich selbst und nutzt die letzten progress-bar. Hier ist mein code:
var files = event.dataTransfer.files;
//iterate over each file to upload, send a request, and attach progress event
for (var i = 0, file; file = files[i]; i++) {
var li = $("<li>" + file.name + "<div class='progressbar'></div></li>");
//add the LI to the list of uploading files
$("#uploads").append(li);
//fade in the LI instead of just showing it
li.hide().fadeIn();
var xhr = new XMLHttpRequest();
xhr.upload.addEventListener('progress', function(e) {
var percent = parseInt(e.loaded / e.total * 100);
li.find(".progressbar").width(percent);
}, false);
//check when the upload is finished
xhr.onreadystatechange = stateChange;
//setup and send the file
xhr.open('POST', '/attachments', true);
xhr.setRequestHeader('X-FILE-NAME', file.name);
xhr.send(file);
}
Gehe ich davon aus, dass die richtige "li" ist nicht immer richtig Lesen, indem Sie die "progress" - event. Ich vermute es gibt irgendeine Art von Bindung habe ich zu tun, zu sagen, die "progress" - Ereignis zu verwenden, eine bestimmte variable, wie es ist "li", aber ich bin mir nicht sicher, was mir fehlt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dein Beispiel funktioniert nicht richtig becourse Sie nicht berücksichtigen, dass xhr-progress-Ereignis wird ausgelöst, wenn alle Elemente der Liste bereits erstellt. Aber es gibt eine Menge von Möglichkeiten, um Ihr Beispiel funktioniert. Die Idee ist, lassen xhr wissen, was genau Listenelement er es zu tun hat. Zum Beispiel verwenden Sie diesen code (ich habe nicht überprüfen, ob es funktioniert. Der Zweck dieses code ist um die Idee zu beschreiben):
Ich denke ich habe eine Lösung gefunden für dieses problem. Es sieht die Arbeit auf einige meiner tests. Ich bin nicht sehr gut in Englisch, also poste ich einfach mal mein Beispiel-Skript. Wenn Sie jede Frage stellen, ich werde versuchen, mehr zu erzählen 🙂