[英]Drag 'n Drop not working when using JQuery
I'm trying to get the file from a drag 'n drop form. 我正在尝试从拖放形式获取文件。 In the
drop
event I inserted the following: 在
drop
事件中,我插入了以下内容:
var files = evt.dataTransfer.files[0];
When I use JavaSript for the event handlers, it works fine, but when I use JQuery, I get the following error: 当我将JavaSript用于事件处理程序时,它可以正常工作,但是当我使用JQuery时,出现以下错误:
Uncaught TypeError: Cannot read property 'files' of undefined
未捕获的TypeError:无法读取未定义的属性“文件”
How can I get the dropped file using JQuery? 如何使用JQuery获取删除的文件?
JavaScript Snippet: JavaScript代码段:
function handleFileSelect(evt) { evt.stopPropagation(); evt.preventDefault(); var files = evt.dataTransfer.files[0]; console.log(files); } function handleDragOver(evt) { evt.stopPropagation(); evt.preventDefault(); } // Setup the dnd listeners. var dropZone = document.getElementById('drop_zone'); dropZone.addEventListener('dragover', handleDragOver, false); dropZone.addEventListener('drop', handleFileSelect, false);
.example { padding: 10px; border: 1px solid #ccc; } #drop_zone { border: 2px dashed #bbb; -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; padding: 25px; text-align: center; font: 20pt bold 'Vollkorn'; color: #bbb; }
<div id="drop_zone">Drop files here</div> <output id="list"></output>
JQuery Snippet jQuery代码段
$(document).ready(function () { $('#drop_zone').on('drop', function (evt) { evt.stopPropagation(); evt.preventDefault(); var files = evt.dataTransfer.files[0]; console.log(files); }); $('#drop_zone').on('dragover', function (evt) { evt.stopPropagation(); evt.preventDefault(); }); });
.example { padding: 10px; border: 1px solid #ccc; } #drop_zone { border: 2px dashed #bbb; -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; padding: 25px; text-align: center; font: 20pt bold'Vollkorn'; color: #bbb; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="drop_zone">Drop files here</div> <output id="list"></output>
您需要获取原始的js事件对象
var files = evt.originalEvent.dataTransfer.files[0];
You can tell jquery to include dataTransfer
on the event object by adding this before you define your event handlers: 您可以通过在定义事件处理程序之前添加以下内容来告诉jquery在事件对象上包括
dataTransfer
:
$.event.props.push("dataTransfer");
And then in the event handlers you can access the files with evt.dataTransfer.files
. 然后,在事件处理程序中,您可以使用
evt.dataTransfer.files
访问文件。
(You may also want to use var files = evt.dataTransfer.files;
rather than var files = evt.dataTransfer.files[0];
if you want access to the entire list of dropped files, as opposed to just the first one.) (如果您想访问整个删除的文件列表,而不是第一个文件,则可能还需要使用
var files = evt.dataTransfer.files;
而不是var files = evt.dataTransfer.files[0];
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.