0

i am learning the drag and drop program in html, and i tried the below code.

<html>
<head>
  My head 
<script>
function dragme(event)
{
  event.dataTransfer.setData("sourceID", event.target.id);
}

function dropHere(event)
{
  event.preventDefault();
  alert ("inside drop Here..");
}

function dropOver(event)
{
  console.log ("inside drop Over..");
}

</script>
<style>

div {width:500px;height:400px;border-color:red;border-style:solid;}
</style>
</head>
<body>
<div id="sourcedrag" ondrop="dropHere(event)" ondragover="dropOver(event)"> 
inside div
</div>
<button draggable=true id="button" ondragstart="dragme(event)" >Press me </button>
<button draggable=true id="button1"> Second Press me </button>
<button draggable=true id="button2"> Second Press me </button>
<button draggable=true id="button3"> Second Press me </button>
<button draggable=true id="button4"> Second Press me </button>
</body>
</html>

Unfortunately, the alert box inside dropHere is not getting invoked. But dropOver console message is getting printed. What am i doing wrong?

Whoami
  • 13,930
  • 19
  • 84
  • 140
  • Possible duplicate of [Drop event not firing in chrome](http://stackoverflow.com/questions/21339924/drop-event-not-firing-in-chrome) – showdev Jul 05 '16 at 18:58

2 Answers2

5

You'll need to add event.preventDefault(); to your dropOver function as well.

To clarify:

From Mozilla:

https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Drag_operations#droptargets

"Most areas of a web page or application are not valid places to drop data. Thus, the default handling of these events is not to allow a drop.

If you want to allow a drop, you must prevent the default handling by cancelling the event. You can do this either by returning false from an attribute-defined event listener, or by calling the event's preventDefault() method."

Michael Hommé
  • 1,696
  • 1
  • 14
  • 18
0

link

I added function of

function allowDrop(ev) {
    ev.preventDefault();
}

And I call it from sourceDrag div. Also I added double quotes to draggable="true" insdtead of draggable=true

 <html>
    <head>
      My head 
    <script>
function dragme(event)
{
  event.dataTransfer.setData("sourceID", event.target.id);
}

function dropHere(event)
{

  alert ("inside drop Here..");event.preventDefault();
}

function dropOver(event)
{
  console.log ("inside drop Over.."+event);
}
function allowDrop(ev) {
    ev.preventDefault();
}
</script>
<style>

div {width:500px;height:400px;border-color:red;border-style:solid;}
</style>
</head>
<body>
<div id="sourcedrag" ondrop="dropHere(event)" ondragover="allowDrop(event)" ondragover="dropOver(event)"> 
inside div
</div>
<button draggable="true" id="button" ondragstart="dragme(event)" >Press me </button>
<button draggable="true" id="button1"> Second Press me </button>
<button draggable="true" id="button2"> Second Press me </button>
<button draggable="true" id="button3"> Second Press me </button>
<button draggable="true" id="button4"> Second Press me </button>
</body>
</html>
The scion
  • 1,001
  • 9
  • 19