如何使用jQuery的drop事件上传从桌面拖出的文件?

Chi*_*hin 63 javascript jquery html5 drag-and-drop

是否可以使用jQuery的drop事件从桌面拖动文件?

如果是这样,我如何获取删除的文件数据?

Ale*_*lex 139

它有点乱(你需要处理至少3个事件)但可能.

首先,您需要为dragover和添加事件处理程序并dragenter阻止这些事件的默认操作:

$('#div').on(
    'dragover',
    function(e) {
        e.preventDefault();
        e.stopPropagation();
    }
)
$('#div').on(
    'dragenter',
    function(e) {
        e.preventDefault();
        e.stopPropagation();
    }
)
Run Code Online (Sandbox Code Playgroud)

然后,您可以添加drop-handler并使用以下命令访问已删除的文件preventDefault:

$('#div').on(
    'drop',
    function(e){
        if(e.originalEvent.dataTransfer && e.originalEvent.dataTransfer.files.length) {
            e.preventDefault();
            e.stopPropagation();
            /*UPLOAD FILES HERE*/
            upload(e.originalEvent.dataTransfer.files);
        }
    }
);
Run Code Online (Sandbox Code Playgroud)

现在,您可以从div中的桌面/资源管理器/查找程序中拖动文件并访问它们.

http://jsfiddle.net/fSA4N/5/

  • 为什么你需要抑制默认的dragover和dragenter行为? (9认同)
  • 进一步"某些浏览器会做一些奇怪的事情":如果你错过你的拖动目标,比如图像文件拖动,某些浏览器的默认行为,例如Firefox就是在窗口中打开文件.为了避免这种情况,将文档正文绑定到dragover并删除事件并取消它们(使用preventDefault/stopPropagation). (3认同)
  • 当您开始将文件拖入浏览器时,某些浏览器会做一些奇怪的事情.这不是必要的.通过这些事件,您还可以添加一些不错的功能,例如突出显示必须删除文件的div. (2认同)
  • 你说"不容易"......?您的回复立即解决了我的同样问题!@loostro:可能的是有一个名为"file"的"全局"var,并使用$(':file').change()icwetarget.files [0](适用于我),或者可能是$('this ").VAL(); (2认同)