拖放期间未触发Javascript Drop事件

Posted

技术标签:

【中文标题】拖放期间未触发Javascript Drop事件【英文标题】:Javascript Drop event not firing during drag and drop 【发布时间】:2020-03-01 12:06:10 【问题描述】:

我在 html5 中练习拖放,我注意到 drop 事件没有触发。

我尝试注意到 dragstart、dragenter 和 dragover 所有这些事件都在触发(我创建了一个 console.log 输出来检查它)

function alerteMoi()
  continent = document.getElementById("afrique");
  droite = document.getElementById("droite");
  continent.addEventListener("dragstart", startDrag, false);
  droite.addEventListener("dragenter", function(e)e.preventDefault, false);
  droite.addEventListener("dragover", function(e)e.preventDefault, false);
  droite.addEventListener("drop", dropped, false);

function startDrag(e)
  console.log(continent);
  e.dataTransfer.setData("Text", continent);

function dropped(e)
  //Cannot log this event, it means that the dropped event is not firing
  console.log(droite);
  e.preventDefault();
  droite.innerHTML = e.dataTransfer.getData("continent");


window.addEventListener('load', alerteMoi, false);
#gauche
    float: left;
    height: auto;
    width: 48%;
    border: 1px solid red;


#droite
    float: right;
    height: 100px;
    width: 44%;
    border: 1px solid blue;
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <link rel="stylesheet" href="style.css"/>
    <script src="script.js"></script>
    <meta charset="utf-8"/>
    <title></title>
</head>
<body>
<ul id="gauche">
    <li draggable="true" id="afrique">Afrique</li>
    <li>Amerique</li> 
    <li  onclick="alert('Azie !');">Azie</li>
    <li>Europe</li>     
    <li  onclick="alert('Oceanie !');">Oceanie</li>                 
</ul>
<div id="droite">
    <ul><li>Monde</li></ul>
</div>
  <img src="ex.png" />
</body>
</html>

【问题讨论】:

【参考方案1】:

preventDefault 是一个方法,因此,应该通过在其名称后面加上括号来调用:e.preventDefault()。还有一种“错字”,因为false 没有作为属性传递给addEventListener() 方法,而是在dragover 函数中执行

改变

droite.addEventListener("dragenter", function(e)e.preventDefault, false);
droite.addEventListener("dragover", function(e)e.preventDefault, false);

droite.addEventListener("dragenter", function(e)e.preventDefault(), false);
droite.addEventListener("dragover", function(e)e.preventDefault(), false);

你应该很高兴。

【讨论】:

以上是关于拖放期间未触发Javascript Drop事件的主要内容,如果未能解决你的问题,请参考以下文章

如何在不实际拖放的情况下使用 jQuery UI Droppable 触发 Drop 事件?

HTML5 拖放事件 - dragLeave 在放置前触发

HTML5拖拽/拖放(drag & drop)详解

dragend 和 drop 事件之间是不是有定义的顺序?

使控件在拖放期间对拖动事件透明

为啥这个网页上没有触发“drop”事件?