Drag & Drop - DataTransfer object

后端 未结 1 1220
太阳男子
太阳男子 2021-02-08 19:48

I\'m building a simple drag n\' drop uploader and I\'m wondering why I can\'t see the file(s) I drop when I console.log(e) (DragEvent) and look at the DragEve

相关标签:
1条回答
  • 2021-02-08 20:45

    The drag data store has different modes depending on when you access it:

    • On dragstart event it's on read/write mode.
    • On drop event, it's in read only mode.
    • And on all other events, it's in protected mode.

      Protected mode is defined this way:

    Protected mode

    For all other events. The formats and kinds in the drag data store list of items representing dragged data can be enumerated, but the data itself is unavailable and no new data can be added.

    See here: https://html.spec.whatwg.org/multipage/interaction.html#the-drag-data-store

    That means that when you access the dataTransfer object in your console, which is not on drop or dragstart event, it's in protected mode, preventing you from accessing the data.

    You can view the fileList because you log the fileList on drop event when dataTransfer is readable. But if you log e.dataTransfer or e, you won't be able to access any data.

    You can test here, even on dragover you can't access what's in dataTransfer:

    document.querySelector('#droppable').ondragover = function(e) {
      console.log('on dragover files are', e.dataTransfer.files)
      e.preventDefault();
    }
    
    document.querySelector('#droppable').ondrop = function(e) {
      console.log('on drop files are', e.dataTransfer.files)
      e.preventDefault();
    }
    <div id=droppable>Drop a file</div>

    0 讨论(0)
提交回复
热议问题