Обзор
У меня есть следующая структура HTML, и я привязал события dragenter и dragleave к элементу <div id="dropzone">.
<div id="dropzone">
    <div id="dropzone-content">
        <div id="drag-n-drop">
            <div class="text">this is some text</div>
            <div class="text">this is a container with text and images</div>
        </div>
    </div>
</div>
Проблема
Когда я перетаскиваю файл по <div id="dropzone">, событие dragenter запускается, как ожидалось. Однако, когда я перемещаю мышь над дочерним элементом, например <div id="drag-n-drop">, событие dragenter запускается для элемента <div id="drag-n-drop">, а затем событие dragleave запускается для элемента <div id="dropzone">.
Если я снова накрою элемент <div id="dropzone">, событие dragenter снова будет запущено, это круто, но затем событие dragleave будет запущено для дочернего элемента слева, поэтому команда removeClass выполненный, что не круто.
Это поведение проблематично по двум причинам:
-  Я привязываю dragenterиdragleaveк<div id="dropzone">, поэтому я не понимаю, почему эти элементы также связаны с дочерними элементами.
-  Я по-прежнему перетаскиваю элемент <div id="dropzone">во время зависания над его дочерними элементами, поэтому я не хочу, чтобыdragleaveсрабатывал!
jsFiddle
Здесь jsFiddle, чтобы возиться с: http://jsfiddle.net/yYF3S/2/
Вопрос
Итак... как я могу сделать так, что когда я перетаскиваю файл над элементом <div id="dropzone">, dragleave не срабатывает, даже если я перетаскиваю любые дочерние элементы... он должен только огонь, когда я покидаю элемент <div id="dropzone">... зависание/перетаскивание в любом месте границ элемента не должно запускать событие dragleave.
Мне нужно, чтобы это было совместимо с несколькими браузерами, по крайней мере, в браузерах, поддерживающих drag-n-drop в HTML5, поэтому этот ответ не подходит.
Похоже, Google и Dropbox выдумали это, но их исходный код минимизирован/сложный, поэтому я не смог понять это из их реализации.
