拖拽时 DataTransfer 的 setData 不生效?
我在做拖拽上传功能,想通过 setData 传个文件 ID,但 drop 事件里用 getData 拿不到值,一直是空字符串。
我试过在 dragstart 里这么写:
event.dataTransfer.setData('text/plain', 'file-123');
然后在 drop 里读:
const id = event.dataTransfer.getData('text/plain');
console.log(id); // 输出空字符串
浏览器是 Chrome 最新版,没报错,就是拿不到数据,是不是哪里漏了?
1. dragover 事件没 preventDefault
必须在 dragover 里阻止默认行为,否则 drop 事件压根不会触发,数据自然拿不到。
2. setData 必须在 dragstart 同步执行
不能在 setTimeout 或者异步操作里调用 setData,Chrome 会当你是无效操作。
复制这个:
如果还是拿不到,试试换成自定义的 MIME 类型,有时候 text/plain 会被浏览器特殊处理:
基本就是这些,dragover 没 preventDefault 是最常见的原因。