You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中drop事件不生效,调用preventDefault()仍无法触发怎么解决?

问题根源

HTML5 原生拖拽规范要求:元素要能接收drop事件,必须先阻止该元素上dragover、dragenter两个事件的默认行为。浏览器默认禁止任意元素作为拖拽放置目标,所以你仅在drop回调中执行阻止默认行为的操作是无效的,事件触发链到不了drop环节。

修复方案

修改你的JS代码,为放置目标补充dragover、dragenter事件监听即可:

const drag1 = document.querySelector(".drag-span-1");
const drop1 = document.querySelector(".drop-span-1");
const mainDiv = document.querySelector(".main-div");

// 补充:给放置目标绑定dragover、dragenter事件,阻止默认行为
const preventDefault = (e) => e.preventDefault();
drop1.addEventListener('dragover', preventDefault);
drop1.addEventListener('dragenter', preventDefault);
drag1.addEventListener('dragover', preventDefault);
drag1.addEventListener('dragenter', preventDefault);

drop1.addEventListener("drop" , (e)=>dropFunc(e , "span"));
drag1.addEventListener("drop" , (e)=>dropFunc(e , "span"));

function dropFunc (e , mode) {
    e.preventDefault()
    console.log(e , "drop" , mode)
}

额外说明

如果后续需要传递拖拽相关的自定义数据,可以给拖拽元素绑定dragstart事件,通过e.dataTransfer.setData()方法设置要传递的内容,在drop回调中用e.dataTransfer.getData()读取即可。

内容的提问来源于stack exchange,提问作者Hadi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 01:54:04