HTML5 拖放文件在 Opera 中不起作用
HTML5 Drag and Drop of Files not working in Opera
下面摘录的代码在 IE/FF/Chrome/Safari/etc 中有效,但在 Opera 中无效。
Opera 提供了一个 "Do you want to upload your files to www.webserver.edu?" 对话框,但回答 Yes 或 No 似乎都不会触发 "drop" 事件。错误控制台中没有记录任何错误。此外,拖动其他内容(页面中的字符串)也能正常工作。
<input type="file" id="fileselect" name="fileselect" multiple="multiple">
<div id="filedrag">or drag files here</div>
...
$(document).ready(function() {
function DragDropEvent(e) {
e.stopPropagation();
e.preventDefault();
e.target.className = ((e.type == "dragover") ||
(e.type == "dragenter")) ? "hover" : "";
if (e.type == "drop") {
var files = (e.dataTransfer && e.dataTransfer.files);
if (files && files.length > 0) UploadFile(files);
}
}
function Init() {
var filedrag = document.getElementById("filedrag");
filedrag.addEventListener("dragenter", DragDropEvent, false);
filedrag.addEventListener("dragover", DragDropEvent, false);
filedrag.addEventListener("dragleave", DragDropEvent, false);
filedrag.addEventListener("drop", DragDropEvent, false);
}
if (window.File && window.FileList && window.FileReader) {
Init();
}
}
只要你有一个相当新的 Opera 版本,代码实际上是好的。
该代码即使在 Opera 12.16(在 Linux 下)也能正常工作,但有一个例外我将在下面描述。
OK
如果您 select 只有一个文件 它会按预期工作 。
KO
如果您 select 一次处理多个文件,则只会看到第一个文件,该事件不会捕获其他文件(实际上它捕获其他但它们被视为 text/uri-list 类型的字符串而不是 files)。我认为这是旧版 Opera(如 12.16)中的错误,因为我在 Opera 开发人员 (https://dev.opera.com/articles/drag-and-drop/demo.html) 编写的演示页面中看到了相同的行为
但是,如果您使用的是较新版本的 Opera,代码将 100%(一次处理 single/multiple 个文件)。
下面摘录的代码在 IE/FF/Chrome/Safari/etc 中有效,但在 Opera 中无效。 Opera 提供了一个 "Do you want to upload your files to www.webserver.edu?" 对话框,但回答 Yes 或 No 似乎都不会触发 "drop" 事件。错误控制台中没有记录任何错误。此外,拖动其他内容(页面中的字符串)也能正常工作。
<input type="file" id="fileselect" name="fileselect" multiple="multiple">
<div id="filedrag">or drag files here</div>
...
$(document).ready(function() {
function DragDropEvent(e) {
e.stopPropagation();
e.preventDefault();
e.target.className = ((e.type == "dragover") ||
(e.type == "dragenter")) ? "hover" : "";
if (e.type == "drop") {
var files = (e.dataTransfer && e.dataTransfer.files);
if (files && files.length > 0) UploadFile(files);
}
}
function Init() {
var filedrag = document.getElementById("filedrag");
filedrag.addEventListener("dragenter", DragDropEvent, false);
filedrag.addEventListener("dragover", DragDropEvent, false);
filedrag.addEventListener("dragleave", DragDropEvent, false);
filedrag.addEventListener("drop", DragDropEvent, false);
}
if (window.File && window.FileList && window.FileReader) {
Init();
}
}
只要你有一个相当新的 Opera 版本,代码实际上是好的。
该代码即使在 Opera 12.16(在 Linux 下)也能正常工作,但有一个例外我将在下面描述。
OK
如果您 select 只有一个文件 它会按预期工作 。KO
如果您 select 一次处理多个文件,则只会看到第一个文件,该事件不会捕获其他文件(实际上它捕获其他但它们被视为 text/uri-list 类型的字符串而不是 files)。我认为这是旧版 Opera(如 12.16)中的错误,因为我在 Opera 开发人员 (https://dev.opera.com/articles/drag-and-drop/demo.html) 编写的演示页面中看到了相同的行为
但是,如果您使用的是较新版本的 Opera,代码将 100%(一次处理 single/multiple 个文件)。