Ich versuche, eine Drop-Box, wo Bilddateien zum Hochladen gezogen werden können, zu erstellen. Dies funktioniert in Chrome und Edge einwandfrei. Allerdings habe ich Probleme in Firefox und IE 11. Zum Beispiel, in IE 11, wenn ich auf die Schaltfläche zum Durchsuchen klicken, erscheint ein Fenster mit dem Titel "Wählen Sie die Datei zum Hochladen." Wenn ich auf ein Bild klicke und auf "Öffnen" klicke, funktioniert es einwandfrei, aber ich kann keine Dateien aus dem Fenster ziehen. Wenn ich jedoch meinen Datei-Explorer öffne, kann ich Bilder einfach per Drag-and-Drop aus dem Datei-Explorer-Fenster ziehen. Ähnliches passiert in Firefox. Ich kann Bilder aus dem Datei-Explorer einfach ziehen, aber wenn ich versuche, aus dem Popup-Fenster "Datei-Upload" zu ziehen, bekomme ich ein Geisterbild mit einem Kreis und einem roten Schrägstrich. Einige Threads hier haben vorgeschlagen, eine Dragstart-Funktion zu verwenden, aber das scheint nicht zu funktionieren, wahrscheinlich weil in der Dokumentation steht "Beachten Sie, dass Dragstart- und Dragendereignisse nicht ausgelöst werden, wenn Sie eine Datei vom Betriebssystem in den Browser ziehen." https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_APIDatei Drag & Drop in IE11 und Firefox
Also gibt es eine Möglichkeit, Dateien aus dem Datei-Upload-Fenster in diesen Browsern ziehen zu können, anstatt Datei-Explorer öffnen zu müssen? Auch hier kann ich per Drag & Drop aus dem Popup in Chrome und Edge ziehen.
Hier ist mein HTML:
Files: <input type="file" id="fileInput" name="files" multiple><br />
<div id="selectedFiles"></div>
<div class="picList">
<div id="dropbox" style="border:1px solid black;height:500px;">
Drop Here
</div>
</div>
Hier ist mein javascript:
dropbox = document.getElementById("dropbox");
dropbox.addEventListener("dragenter", dragenter, false);
dropbox.addEventListener("dragover", dragover, false);
dropbox.addEventListener("drop", drop, false);
function dragenter(e) {
e.stopPropagation();
e.preventDefault();
}
function dragover(e) {
e.stopPropagation();
e.preventDefault();
}
function drop(e) {
e.stopPropagation();
e.preventDefault();
var dt = e.dataTransfer;
var files = dt.files;
handleFiles(files);
}
Jede Beratung?
Edit:
Hier ist meine handleFiles Funktion (dupCheck ein Array ist für Duplikate und gespeicherte Dateien zu überprüfen, ist ein Array von Dateien hochgeladen werden, was ich brauche, weil ich Benutzer möchte eine Datei löschen können, durch das Vorschaubild zu löschen und nur HTML Filereader lesen, damit ich nicht einzelne Bilder direkt aus dem Dateistapel löschen kann.):
function handleFiles(files) {
for (var i = 0; i < files.length; i++) {
var file = files[i];
var imageType = /^image\//;
if (!imageType.test(file.type)) {
continue;
}
var img = document.createElement("img");
img.classList.add("obj");
img.file = file;
$(img).addClass('selFile');
$(img).attr('data-file', file.name);
var A = [];
for (var z = 0; z < dupCheck.length; z++) {
A.push(dupCheck[z].name)
}
if (!A.includes(file.name)) {
storedFiles.push(file);
var _checker = { name: file.name };
dupCheck.push(_checker);
dropbox.appendChild(img);
var reader = new FileReader();
reader.onload = (function (aImg) { return function (e) { aImg.src = e.target.result; }; })(img);
reader.readAsDataURL(file);
A = [];
};
}
}
erwägen, eine Bibliothek zu verwenden. Hier ist eine, die ich geschrieben habe. https://github.com/Pamblam/fileUpload –
Cool. Ich werde es mir ansehen. – Pennywise
Können Sie Text von 'handleFiles' in Frage einfügen? – guest271314