Entfernen-Datei aus mehreren Dateien-uploader auf den button klicken, wenn die Verwendung von HTML5-Datei input
Hinzufügen entfernen Taste hier, wie einfach entfernen, indem man in der queue-Dateien wie dieses
Der Grund, warum ich bin nicht mit free file upload-plugins mit OOB-Stecker, da meine client-Anforderungen für Sicherheit und Sie brauchen einfache upload-Benutzeroberfläche ohne komplizierte plugins.
JS:
$(function() {
var dropZoneId = "drop-zone";
var buttonId = "clickHere";
var mouseOverClass = "mouse-over";
var dropZone = $("#" + dropZoneId);
var ooleft = dropZone.offset().left;
var ooright = dropZone.outerWidth() + ooleft;
var ootop = dropZone.offset().top;
var oobottom = dropZone.outerHeight() + ootop;
var inputFile = dropZone.find("input");
document.getElementById(dropZoneId).addEventListener("dragover", function(e) {
e.preventDefault();
e.stopPropagation();
dropZone.addClass(mouseOverClass);
var x = e.pageX;
var y = e.pageY;
if (!(x < ooleft || x > ooright || y < ootop || y > oobottom)) {
inputFile.offset({
top: y - 15,
left: x - 100
});
} else {
inputFile.offset({
top: -400,
left: -400
});
}
}, true);
if (buttonId != "") {
var clickZone = $("#" + buttonId);
var oleft = clickZone.offset().left;
var oright = clickZone.outerWidth() + oleft;
var otop = clickZone.offset().top;
var obottom = clickZone.outerHeight() + otop;
$("#" + buttonId).mousemove(function(e) {
var x = e.pageX;
var y = e.pageY;
if (!(x < oleft || x > oright || y < otop || y > obottom)) {
inputFile.offset({
top: y - 15,
left: x - 160
});
} else {
inputFile.offset({
top: -400,
left: -400
});
}
});
}
document.getElementById(dropZoneId).addEventListener("drop", function(e) {
$("#" + dropZoneId).removeClass(mouseOverClass);
}, true);
inputFile.on('change', function(e) {
$('#filename').html("");
var fileNum = this.files.length,
initial = 0,
counter = 0;
for (initial; initial < fileNum; initial++) {
counter = counter + 1;
$('#filename').append('<span class="fa-stack fa-lg"><i class="fa fa-file fa-stack-1x "></i><strong class="fa-stack-1x" style="color:#FFF; font-size:12px; margin-top:2px;">' + counter + '</strong></span> ' + this.files[initial].name + ' <span class="fa fa-times-circle fa-lg closeBtn" title="remove"></span><br>');
}
});
})
CSS:
#drop-zone {
width: 100%;
min-height: 150px;
border: 3px dashed rgba(0, 0, 0, .3);
border-radius: 5px;
font-family: Arial;
text-align: center;
position: relative;
font-size: 20px;
color: #7E7E7E;
}
#drop-zone input {
position: absolute;
cursor: pointer;
left: 0px;
top: 0px;
opacity: 0;
}
/*Important*/
#drop-zone.mouse-over {
border: 3px dashed rgba(0, 0, 0, .3);
color: #7E7E7E;
}
/*If you dont want the button*/
#clickHere {
display: inline-block;
cursor: pointer;
color: white;
font-size: 17px;
width: 150px;
border-radius: 4px;
background-color: #4679BD;
padding: 10px;
}
#clickHere:hover {
background-color: #376199;
}
#filename {
margin-top: 10px;
margin-bottom: 10px;
font-size: 14px;
line-height: 1.5em;
}
.file-preview {
background: #ccc;
border: 5px solid #fff;
box-shadow: 0 0 4px rgba(0, 0, 0, 0.5);
display: inline-block;
width: 60px;
height: 60px;
text-align: center;
font-size: 14px;
margin-top: 5px;
}
.closeBtn:hover {
color: red;
}
}
HTML:
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<div id="drop-zone">
<p>Drop files here...</p>
<div id="clickHere">or click here.. <i class="fa fa-upload"></i>
<input type="file" name="file" id="file" multiple />
</div>
<div id='filename'></div>
</div>
Hinweis: ich habe nicht selbst den code habe ich wieder verwendet es als meine Ressourcen von anderen Menschen, und modifiziert Sie für meinen Kunden
**UPDATE
Hier meine fiddle link
- Siehe stackoverflow.com/q/29841147 , stackoverflow.com/q/32002431
- Die Vervielfältigung von stackoverflow.com/questions/3144419/...
- oh sorry, mein Fehler ich habe nicht bemerkt Sie, bevor ich Sie gefragt habe, Suche ich zunächst aber nochmal vielen Dank Jungs zu erwähnen, dass.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Datei Liste der HTML5-input-Datei ist readonly, also, wenn Sie versuchen zu entfernen Sie eine Datei aus, wird es dir nicht erlaubt sein.
Was Sie tun müssen, ist erhalten eine separate array-Liste (JSON array als pro Beispiel).
Habe ich gewickelt, Ihre X-Taste mit einem div-halten, dass der index-Datei verkettet, um ein 'file_' string, und fügte hinzu, eine
onclick
FunktionremoveLine(obj)
akzeptiert, dass das element als Objekt.Außerdem habe ich ein JSON-array
finalFiles
im globalen Bereich als auch bewegt dieinputFile
auf die Globale Reichweite.Wenn das file-input-Veränderungen, ich bin Einstellung der JSON-array mit den ausgewählten Dateien durch :
Die Funktion
removeLine
wird, Spülen Sie die input-Datei-Liste, um die gleiche Datei-Auswahl wieder, wenn der Benutzer entfernt die Datei durch Fehler, die Funktion ruft den Datei-index aus der Hülle division-id, entfernt das wrapper-div, dann löscht die Datei aus dem JSON-array.Können Sie die pflegen Ihre Dateien, wenn das Formular übermittelt und versenden Sie über AJAX post mit FormData in einer ähnlichen Weise zu Dieser Artikel.
JS:
CSS:
HTML:
#drop-zone input
übrigens nochmals vielen Dank.Habe ich auch schon gemacht für meine Dropzone. Fühlen Sie sich frei, um Sie anzupassen. Dies ist aus meiner Laravel-app. Sie sollten sich auf
avatar_refresh_upload
. Abgeschnitten unnötigen Sachen und du bist fertig.Macht lange Geschichte kurz - wenn Sie wollen-reset-Eingang-Datei, nachdem Sie wieder eine Datei für den upload, aber vor dem Absenden, müssen Sie:
Da wir Sie nicht ändern Sie die ausgewählten Dateien-array in der
<input type'file' multiple>
tag, dann habe ich aktualisiert und Sie code, um zu zeigen, die Anzahl der Datei und löschen Sie alle Dateien, wenn mehrere Dateien ausgewählt sind.Es ist ein Turnschuh der aktualisierten code.