简体   繁体   English

自动拖放文件上传

[英]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.

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