有一个HTML textarea。我能够抓住那个事件 本地文件 被拖放到textarea上。但 如何获取被删除文件的名称? (最后要修改并插入textarea。)
在这种情况下,以下表达式返回None:
event.dataTransfer.files
event.dataTransfer.getData('text/plain')
我做了一个简短的例子 Firefox 3 那是我目前的目标平台。
<script>
function init() {
document.getElementById('x').addEventListener('drop', onDrop, true)
}
function onDrop(event) {
var data = event.dataTransfer.getData('text/plain')
event.preventDefault()
alert('files: ' + event.dataTransfer.files + ' && data: ' + data + '.')
}
</script>
<body onload='init()'>
<textarea cols=70 rows=20 id='x'></textarea>
这有点晚了 - 但我认为你要找的是:
event.dataTransfer.files[0].name
您还可以获得以下属性:
event.dataTransfer.files[0].size
event.dataTransfer.files[0].type
您可以使用以下内容循环访问这些文件:
var listOfNames='';
for(var i=0,tot=event.dataTransfer.files.length; i<tot; i++){
listOfNames+=event.dataTransfer.files[i].name + '\r\n';
}
顺便说一下 - 如果你使用的是jQuery,那么可以在这里找到dataTransfer对象:
event.originalEvent.dataTransfer.files[0].name
不知道它是否仍然相关,但我遇到了同样的问题。这是我解决它的方式:
- 使用单个输入字段创建普通上载表单(type =“file”)
将此HTML属性添加到输入字段:
dropzone =“copy file:image / png file:image / jpg file:image / jpeg”
设置JQuery监听器或其他什么来捕获输入字段上的“drop”-event
在输入字段上拖放本地图像时,“value”属性会自动填充,您可以像处理任何其他HTML表单一样处理它。
我还将表单包装到另一个HTML元素(div)中,设置div的大小并设置overflow:通过CSS隐藏 - 这样,你可以摆脱“浏览”按钮。这不好,但它确实有效。我也用过 给ajaxForm 插件在后台上传图片 - 效果非常好。
据我所知,你需要获得一个实例 nsIFile
为了获得文件路径( File
class不提供此功能)。
此MDC页面说明了如何执行此操作: https://developer.mozilla.org/En/DragDrop/Recommended_Drag_Types#file。
请注意,虽然未在上一个链接中列出,但获得了 nsIFile
实例需要特权升级(参见我的答案) 我可以将文件从桌面拖到Firefox 3.5中的放置区域并启动上传吗? 说明如何做到这一点)。
我通过检测鼠标悬停和“丢弃”区域上的mousedown来做到这一点
Alemjerus是正确的,你无法访问你正在寻找的东西。
您在回复评论时提到的行为是某些浏览器的默认行为。例如,对于此条目的stackoverflow textarea,如果我使用Safari并将文件拖入其中,则会将文件的路径放入textarea。另一方面,使用firefox 3.5,它会尝试使用浏览器打开文件。
基本上,您尝试实现的“拖放”功能是由客户端计算机上的浏览器和操作系统处理的 - 您无法使用Javascript实现此目的。
出于安全原因,您无法使用Javascript执行此操作。 Javascript VM无法直接访问OS文件系统。您只能拖放文字。