To solve this issue for drag and drop event, dragLeave fires before drop sometimes:
onDragOver = function(e) { e.stopPropagation() } onDrop = function(e) { /* for drop */ }
Under drop, you can set this:
function drop(ev) { event.preventDefault(); var data=event.dataTransfer.getData("Text"); event.target.appendChild(document.getElementById(data)); }