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

IT技术 javascript jquery html drag-and-drop
2021-03-07 15:13:09

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

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

1个回答

这有点混乱(您需要处理至少 3 个事件)但可能。

首先,您需要为这些事件添加事件处理程序dragoverdragenter阻止这些事件的默认操作,例如:

$('#div').on(
    'dragover',
    function(e) {
        e.preventDefault();
        e.stopPropagation();
    }
)
$('#div').on(
    'dragenter',
    function(e) {
        e.preventDefault();
        e.stopPropagation();
    }
)

调用preventDefault这些事件实际上很重要,否则某些浏览器可能永远不会触发该drop事件。

然后您可以添加放置处理程序并使用以下命令访问放置的文件e.originalEvent.dataTransfer.files

$('#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);
        }
    }
);

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

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

你说“不容易”...?您的回复立即解决了我同样的问题!@loostro:可能是有一个名为“file”的“全局”var,并使用 $(':file').change() icwetarget.files[0](对我有用),或者 $('this ').val();
2021-04-21 15:13:09
除了“某些浏览器会做一些奇怪的事情”之外:如果您错过了拖动目标,例如图像文件拖动,某些浏览器(例如 Firefox)的默认行为是在窗口中打开文件。为了避免这种情况,将文档正文绑定到拖放事件并取消它们(使用 preventDefault/stopPropagation)。
2021-04-23 15:13:09
当您开始将文件拖入浏览器时,某些浏览器会做一些奇怪的事情。这真的没有必要。通过这些事件,您还可以添加一些不错的功能,例如突出显示必须放置文件的 div。
2021-05-02 15:13:09
是否可以以某种方式使用 e.originalEvent.dataTransfer.files 并将其设置为文件输入?
2021-05-10 15:13:09
为什么需要抑制默认的 dragover 和 dragenter 行为?
2021-05-18 15:13:09