简体   繁体   English

使用JQuery时拖放不起作用

[英]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 JSFiddle JavaScript JSFiddle

JQuery JSFiddle jQuery JSFiddle

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM