我正在开发一个JavaScript和HTML的交互式文件上传器,我需要访问当前拖动的文件文件名(触发dragenter事件的文件名)。
但是有一个问题,事件dataTransfer成员不包含任何文件,我真的需要在抛出drop事件之前知道文件名。有可能吗?
提前致谢。
答案 0 :(得分:6)
我猜你可能要为它声明一个局部变量....并且记得在拖动开始时初始化它....当拖动结束时杀死它...(dragend / drop)
在“DragStart”中分配.....(注意:在dragstart中你可以使用“event.dataTransfer.setData”将任何值赋给dataTransfer ....但是在DragEnter / DragOver中无法访问它< / p>
因为安全原因导致“DragEnter”无法访问dataTransfer.getData() 它只能在“onDrop”动作中访问.....
请参阅以下链接: //获取数据不能在这里使用(对于交叉框架),原因如下: http://msdn.microsoft.com/en-us/library/ie/ms536436(v=vs.85).aspx
//在DragEnter / DragOver中使用dataTransfer.getData对Chorme不起作用 http://code.google.com/p/chromium/issues/detail?id=50009
//出于安全原因,只能在DROP中访问dataTransfer.getData .... http://code.google.com/p/chromium/issues/detail?id=2141
或者您可以查看以下链接...看看它是否有用: http://weblog.bocoup.com/using-datatransfer-with-jquery-events/ 强> 的
MORE: 您还可以使用localStorage / sessionStorage调用,它将数据保存到浏览器缓存中,localStorage可以在Cross Window中使用(但是相同的浏览器),sessionStorage只能访问同一个会话。 做一些像: 在DragStart中 - &gt;
localStorage.setItem("DraggedFileName",myFileName);
在您的DragEnter - &gt;
中var myFileName = undefined;
if(localStorage.getItem("DraggedFileName"))
myFileName = localStorage.getItem("DraggedFileName");
在DropEvent和DragEnd中 - &gt;
if(localStorage.getItem("DraggedFileName"))
localStorage.removeItem("DraggedFileName"); //Remove after Drop/DragEnd, clear it
希望它有所帮助......