Umsetzung Entfernen von Schaltflächen für jQuery-File-Upload
Ich vielleicht nähert sich diese mit einer völlig falschen Vorstellung, so lassen Sie mich meine situation erklären ersten.
Was ich versuche zu erreichen mit jQuery-File-Upload ist, um dem Benutzer zu ermöglichen, wählen Sie die Dateien, die Sie hochladen. Sie werden erlaubt, um mehrere Dateien auszuwählen. Für jetzt ist es egal, welche Art, aber Sie werden vor allem das hochladen von Bildern. Die ausgewählten Dateien erscheinen dann in einer Liste mit der Schaltfläche "entfernen" rechts neben dem Dateinamen für jede Datei. Wie im Bild unten.
Wie kann ich die implementieren ein Mittel, das dem Benutzer erlaubt, die Datei zu löschen, die Sie ausgewählt haben, aus der Liste der Dateien, die erwarten hochladen?
Sobald der Benutzer fühlt sich wohl mit Ihrer Auswahl der Dateien, die Sie klicken Sie auf die "Start Upload" - button, startet das hochladen der Dateien in der Liste enthalten und Auslöser der Fortschrittsbalken oben abgebildet.
Habe ich versucht, einige der Fehlersuche selbst einschließlich der Protokollierung Ereignisse, die passieren, wenn die Schaltfläche geklickt wird, aber nicht verwalten können, um es zu entfernen aus der Liste der Dateien zum upload ausgewählt. Ich weiß, es ist ein drop
callback-aber ich bin mir nicht sicher, ob das ist, was ich verwenden soll.
Unten ist mein code.
$(function () {
$('#fileupload').fileupload({
dataType: 'json',
url: '../php/',
add: function (e, data) {
//$.each(data.files, function(index, file) {
data.context = $('<li class=\"list-group-item\">')
//.html(file.name+"<button type=\"button\" id=\"drop\" class=\"btn btn-danger btn-xs pull-right\"><span class=\"glyphicon glyphicon-remove\"></span></button>")
//see https://stackoverflow.com/questions/26234279/blueimp-jquery-upload-multiple-files-doesnt-work for the reason for the line below
.html(data.files[0].name+"<button type=\"button\" id=\"drop\" class=\"btn btn-danger btn-xs pull-right\"><span class=\"glyphicon glyphicon-trash\"></span></button>")
.appendTo(".list-group");
/*$('.btn-danger').on('click', function() {
console.log('Drop '+file.name+' \n');
});*/
//});
$('.btn-danger').on('click', function(e, data) {
//console.log("Removing all objects...\n");
//data.context.remove(data.files[0].name);
//data.context.remove(data.files[0]);
e.preventDefault();
/*var filename = $(this).parent().text();
console.log("Filename: "+filename);
data.context.remove(data.files.filename);
console.log("Clicked the drop button");*/
try { //here I try thinking that I can call the drop() callback but I'm still trying to wrap my head around how this all works.
drop(e, data);
} catch(error) {
console.log("The error was: "+error);
}
});
},
submit: function (e, data) {
$('#start-upload').on('click', function() {
//$('#start-upload').addClass('#disabledInput');
console.log("This is the start upload button!");
});
},
done: function (e, data) {
/*$.each(data.result.files, function (index, file) {
$('<p/>').text(file.name).appendTo('.files').find('#panel-body');
});*/
},
progressall: function (e, data) {
var progress = parseInt(data.loaded / data.total * 100, 10);
$('#progress .bar').css(
'width',
progress + '%'
);
},
drop: function (e, data) {
$.each(data.files, function (index, file) {
//$('.btn-danger').on('click', function() {
console.log('Dropped file: '+ file.name +'\n');
//});
});
}
}).on('.fileuploadsubmit', 'click', function(e, data) {
console.log("Submit button pressed.");
//data.formData = data.context.find(':input').seralizeArray();
});
});
Schließlich sollte all dies in meinem $(document).ready
?
Ich wissen, dass dies möglicherweise ein re-post von dieser Beitrag aber das sind zwei Fragen in einer, wo hier dachte ich, unterteilen Sie es in kleinere Probleme.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Abbruch von upload durch click-Ereignis
Zuerst muss ich dir sagen, dass ich aufgebaut habe etwas ähnliches wie du. Nach erreichen, dass Punkt, den ich fragte mich die gleichen Fragen und landete hier. Leider musste ich mir selber helfen und es gelöst.
Ihre grundlegende problem ist, dass Sie mit einer Signatur der Methode für das click-Ereignis (
function(e, data)
), die überschrieben werden, die die Unterschrift des mit der add-Methode (function(e, data)
). So, während Sie habe versucht, entfernen Sie den Daten-Kontext waren Sie tatsächlich die änderung der Daten des click-Ereignis. So verlassen nur die Variablen (oder umbenennen) in das click-Ereignis, weil in deinem Beispiel brauchen Sie Sie nicht.Nachdem ich, dass Sie am Ende versucht sauber zu "zerstören" - uploads. Ich fand heraus, es ist sauber auf den ersten Abbruch Sie und deaktivieren Sie alle später Einreichen.
Hier ist ein funktionierendes code-Beispiel, die passen sollte Ihr benötigt und hat einige selbst erklärende Kommentare:
Zusätzliche Hinweis: nicht, verwenden Sie doppelte Anführungszeichen für JavaScript, weil Sie zu entkommen müssen Sie innerhalb der HTML-markup.
Gewusst wie: laden Sie die JavaScript
Diese Frage ist viel komplexer, als Sie erwarten. Es ist eine nie enden wollende Diskussion der Konformität mit sauberem HTML-markup versus laden der Seite. Bei der Auswahl einer Richtung, in die Sie am Ende in eine weitere Wahl zwischen onload-events und jQuery. Sie sollten öffnen Sie eine andere Frage oder versuchen zu finden, eine Verwandte ein. Dabei Stimme ich mit dem setzen von Skripts in eine saubere anonyme Funktion, die automatisch geladen, nachdem das Dokument bereit:
$(function() { /*yourcontent*/});
.Gemäß der Dokumentation für das plugin da sein sollte .destroy-Methode, aber die docs sind ziemlich unscharf, darüber, wie Sie zu initialisieren, oder wenn die zu vernichten Sie eine Datei aus dem array, oder einfach nur zerstören die ganze form. Es sollte ein Weg sein, der zumindest in der Theorie sollte es werden.
Als für den zweiten Teil, ja. Sollte Ihr code in ein jQuery-Initialisierer wie
$(document).ready
oder die beliebtesten$(function() {});