[英]Drag & Drop file upload automatically
Here is my code: 这是我的代码:
// first case $('.drop-files-container').on('drop dragdrop',function(e) { var files = e.originalEvent.dataTransfer.files; processFileUpload(files); return false; }); // second case $('#files').on('change',function(e) { var files = e.originalEvent.dataTransfer.files; processFileUpload(files); return false; }); function processFileUpload(droppedFiles) { alert('send ajax call'); } $('.drop-files-container').on('dragenter',function(event){ event.preventDefault(); $(this).css('background','#f1f1f1'); }) $('.drop-files-container').on('dragover',function(event){ event.preventDefault(); })
html, body{ height: 100%; } .drop-files-container{ display: block; border: 2px dashed #aaa; width: 550px; padding: 60px 0px; margin: 0 auto; margin-top: 20px; font-size: 60px; line-height: 2; color: #999; text-align: center; cursor: pointer; } .drop-files-container:hover{ background-color: #f1f1f1; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <form enctype="multipart/form-data" id="yourregularuploadformId" action="#"> <div> <label for="files" class="drop-files-container">Drag .txt File Here</label> <input id="files" type="file" name="files[]" style="visibility:hidden;" multiple="multiple"> </div> </form>
I need to execute processFileUpload(droppedFiles)
function in two cases. 在两种情况下,我需要执行processFileUpload(droppedFiles)
函数。 Either when a file is dragged in .drop-files-container
area or when a file is selected by "choose a file window" (when you click on that area, mentioned window will be open). 将文件拖到.drop-files-container
区域中时,或者通过“选择文件窗口”选择文件时(单击该区域时,将打开所提到的窗口)。
As you see, my code works for first case (drag and drop) as well, but it doesn't work for second one (choose a file window). 如您所见,我的代码也适用于第一种情况(拖放),但不适用于第二种情况(选择文件窗口)。 It throws this error: 它引发此错误:
"Uncaught TypeError: Cannot read property 'files' of undefined" “未捕获的TypeError:无法读取未定义的属性'文件'”
How can I fix it? 我该如何解决?
You can try this, 你可以试试看
var files = $(this)[0].files;
for your second block. 为您的第二个街区。
You can also use 您也可以使用
var files = evt.target.files;
or 要么
var files = document.getElementById('files').files;
Refer these links, 参考这些链接,
// first case $('.drop-files-container').on('drop dragdrop',function(e) { var files = e.originalEvent.dataTransfer.files; processFileUpload(files); return false; }); // second case $('#files').on('change',function(e) { var files = $(this)[0].files; processFileUpload(files); return false; }); function processFileUpload(droppedFiles) { alert('send ajax call'); } $('.drop-files-container').on('dragenter',function(event){ event.preventDefault(); $(this).css('background','#f1f1f1'); }) $('.drop-files-container').on('dragover',function(event){ event.preventDefault(); })
html, body{ height: 100%; } .drop-files-container{ display: block; border: 2px dashed #aaa; width: 550px; padding: 60px 0px; margin: 0 auto; margin-top: 20px; font-size: 60px; line-height: 2; color: #999; text-align: center; cursor: pointer; } .drop-files-container:hover{ background-color: #f1f1f1; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <form enctype="multipart/form-data" id="yourregularuploadformId" action="#"> <div> <label for="files" class="drop-files-container">Drag .txt File Here</label> <input id="files" type="file" name="files[]" style="visibility:hidden;" multiple="multiple"> </div> </form>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.