HTML5 拖放功能非常适合处理文件上传。但如果这是您唯一的使用场景,那么了解某个特定的 dragenter
或 dragover
事件是否实际包含文件会很有用。例如,与仅仅拖动一些选定的文本不同。
将事件对象发送到此函数,它将返回真值(假设您使用的是支持所有这些功能的浏览器 支持所有这些功能)。
function containsFiles(event) {
if (event.dataTransfer.types) {
for (var i = 0; i < event.dataTransfer.types.length; i++) {
if (event.dataTransfer.types[i] == "Files") {
return true;
}
}
}
return false;
}
如何解决这个问题?
请注意,Firefox 中的
types
是一个DOMStringList
,而在 Chrome 中它是一个Array
。您可以使用types.indexOf("Files") !== -1
,但这不适用于DOMStringList
。此时,您不妨使用作者的解决方案。IE9+ 的另一种方法
更简单、更高效的版本
PS:适用于任何事件,即使是 jQuery 事件对象。
更好的方法是
因为 Firefox 的类型为
Array [ "application/x-moz-file", "Files" ]