<!doctype html>
<html>
  <head>
    <title>Drag and drop with 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">
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; }
    e.preventDefault(); //don't cancel when it bubbles from the child elements
    if( switchcount ) { aftercount++; } else { beforecount++; }
  };
  drag.ondragend = function (e) {
    document.getElementsByTagName('div')[2].innerHTML = ( beforecount == 1 && aftercount == 0 ) ? 'PASS' : ( 'FAIL, dragenter fired on body '+beforecount+' time(s) before blue.ondragenter and '+aftercount+' time(s) afterwards, instead of 1 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>
