JSFiddle - React, Tailwind, and code Playground
HTML
<div id="list">
<div class="el" draggable="true" ondragstart="onDrag(event)">ELEMENT A</div>
<div class="el" draggable="true" ondragstart="onDrag(event)">ELEMENT B</div>
<div class="el" draggable="true" ondragstart="onDrag(event)">ELEMENT C</div>
</div>
<div id="target" ondragover="onContainerOver(event)">
</div>
CSS
#list{
}
.el{
height: 20px;
margin: 10px;
border: solid 1px black;
background-color: blue;
}
#target{
min-height: 200px;
width: 100%;
background-color: grey;
}
JavaScript
function onDrag(ev){
var el = ev.srcElement;
console.log("Drag: " + ev.srcElement.outerHTML)
ev.dataTransfer.setData('text/html', ev.srcElement.outerHTML);
}
function onContainerOver(ev){
ev.preventDefault();
ev.dataTransfer.dropEffect = "move"
}
function onContainerDrop(ev){
ev.preventDefault();
console.log("Drop: " + ev.dataTransfer.getData("text/html"))
ev.currentTarget.innerHTML = ev.dataTransfer.getData("text/html");
}
document.getElementById('target').addEventListener('drop', onContainerDrop, true); // This should not bubble, but it does. Target is always the child first rather than the element where the event listener resides. Why???