html 为什么dataTransfer没有文件?

56lgkhnf  于 2024-01-04  发布在  其他
关注(0)|答案(1)|浏览(121)

我正在学习前端,并试图实现文件拖放。我读了指南和文档,并试图实现这一点,但当我拖动文件的事件工程,它没有文件在数据传输。
超文本标记语言:

  1. <form
  2. id='upload-profile-avatar'
  3. class='form form-upload-avatar flex-column-centered flex-centered gap-10'
  4. action='/change_avatar'
  5. method='POST'
  6. enctype='multipart/form-data'
  7. >
  8. <div class='flex-column-centered flex-centered gap-5 upload-avatar-modal__image'><img
  9. class='upload-avatar-modal__picture'
  10. src='/img/upload.png'
  11. alt='upload image'
  12. />
  13. <span class='upload-avatar-modal-image__message'>Drag Here</span></div>
  14. <div class='flex-centered upload-avatar-modal__alternative'><span
  15. class='font-size-14 upload-avatar-modal-image__message'
  16. >or</span></div>
  17. <div class='form__input form__input-upload-avatar'>
  18. <button
  19. type='button'
  20. data-action='choose'
  21. class='btn btn-upload-avatar padding-5-10 border-radius-5 font-size-16 font-weight-bold'
  22. form='upload-avatar'
  23. >
  24. <span>Upload<input
  25. type='file'
  26. data-name='upload-avatar'
  27. accept='image/jpeg, image/png'
  28. class='input input-upload-avatar'
  29. name='user-avatar'
  30. /></span>
  31. </button>
  32. </div>
  33. <div class='upload-avatar-modal__avatar-preview'><img
  34. class='avatar border-radius-10 avatar-preview__image'
  35. src=''
  36. alt='avatar-preview'
  37. /><div class='flex-centered upload-avatar-modal__undo'><button
  38. class='stratch-layout flex-centered border-radius-5 btn btn-revert-change-avatar'
  39. ><img src='/svg/close.svg' alt='undo-change-avatar' /></button></div></div>
  40. </form>

字符串
我把文件放在这个表单上。JS:

  1. const dropAvatarHandler = (e) => {
  2. e.preventDefault();
  3. console.log(e);
  4. const file = e.dataTransfer?.files[0];
  5. if(!file)
  6. return;
  7. e.target.querySelector('.input-upload-avatar').files[0]=file;
  8. //function which does something with files
  9. previewAvatar(e);
  10. }
  11. const dragoverAvatarHandler = (e) => {
  12. e.preventDefault();
  13. }
  14. document.querySelector('.form-upload-avatar').addEventListener('dragover',dragoverAvatarHandler);
  15. document.querySelector('.form-upload-avatar').addEventListener('drop',dropAvatarHandler);


console.log告诉我没有文件,但我删除了一个文件。根据指南和文档,它必须工作,但我没有看到问题。
我试了一些指南,但它仍然不工作。

wtzytmuj

wtzytmuj1#

DataTransfer对象中的整个FileList对象分配给输入对象,而不是将单个文件附加到输入的FileList

  1. const form = document.querySelector('.form-upload-avatar');
  2. const dropAvatarHandler = (e) => {
  3. e.preventDefault();
  4. if (!e.dataTransfer.files.length) {
  5. return;
  6. }
  7. form.querySelector('.input-upload-avatar').files = e.dataTransfer.files;
  8. }
  9. const dragoverAvatarHandler = (e) => {
  10. e.preventDefault();
  11. }
  12. form.addEventListener('dragover', dragoverAvatarHandler);
  13. form.addEventListener('drop', dropAvatarHandler);

个字符

展开查看全部

相关问题