<!doctype html>
<html>
  <head>
    <title>Drag and drop without cancelling dragenter on body</title>
    <style type="text/css">
div:first-child {
  height: 100px;
  width: 100px;
  background: orange;
  display: inline-block;
}
div:first-child + div {
  height: 100px;
  width: 100px;
  margin-left: 100px;
  background: blue;
  display: inline-block;
}
    </style>
    <script type="text/javascript">
//If dragenter is cancelled the body should then become the target element, receiving both a dragenter and a dragover event.
//When the body is the actual immediate user selection (first time over the body), that means it gets *2* dragenter events
//Then when a div becomes immediate user selection (blue) but does not cancel the dragenter event, dragenter does not need
//to fire on body because body is already the current target element
//Then when the body is the actual immediate user selection again (second time over the body), it is already the current
//target element, so does not get a dragenter event
window.onload = function () {
  var drag = document.getElementsByTagName('div')[0], beforecount = 0, aftercount = 0, switchcount = false;
  drag.ondragstart = function (e) {
    e.dataTransfer.setData('text','hello');
    e.dataTransfer.effectAllowed = 'copy';
  };
  drag.ondragenter = drag.ondrop = drag.ondragover = function (e) {
    e.preventDefault();
  };
  var drop = document.getElementsByTagName('div')[1];
  drop.ondragenter = function (e) {
    switchcount = true;
  };
  drop.ondragover = function (e) {
    e.preventDefault();
  };
  document.body.ondragenter = function (e) {
    if( e.target != this ) { return; }
    if( switchcount ) { aftercount++; } else { beforecount++; }
  };
  drag.ondragend = function (e) {
    document.getElementsByTagName('div')[2].innerHTML = ( beforecount == 2 && aftercount == 0 ) ? 'PASS' : ( 'FAIL, dragenter fired on body '+beforecount+' time(s) before blue.ondragenter and '+aftercount+' time(s) afterwards, instead of 2 and 0 times respectively' );
  };
};
    </script>
  </head>
  <body>

    <div draggable="true"></div><div></div>
    <div>&nbsp;</div>
    <p>Drag the orange square onto the blue square, then back to the orange square, and release it.</p>
    <noscript><p>Enable JavaScript and reload</p></noscript>

  </body>
</html>
