Это довольно простое решение работает для меня до сих пор, при условии, что ваше событие прикреплено к каждому элементу перетаскивания индивидуально. </ Р>

я проблема в том, чтоdragleave событие элемента вызывается при наведении на дочерний элемент этого элемента. Также,dragenter не срабатывает при повторном наведении на родительский элемент.

Я сделал упрощенную скрипку:http://jsfiddle.net/pimvdb/HU6Mk/1/.

HTML:

<div id="drag" draggable="true">drag me</div>

<hr>

<div id="drop">
    drop here
    <p>child</p>
    parent
</div>

со следующим JavaScript:

$('#drop').bind({
                 dragenter: function() {
                     $(this).addClass('red');
                 },

                 dragleave: function() {
                     $(this).removeClass('red');
                 }
                });

$('#drag').bind({
                 dragstart: function(e) {
                     e.allowedEffect = "copy";
                     e.setData("text/plain", "test");
                 }
                });

То, что он должен сделать, это уведомить пользователя, сделав падениеdiv красный при перетаскивании чего-то туда. Это работает, но если вы перетащите вp ребенок,dragleave уволен иdiv больше не красный Возвращаясь к падениюdiv также не делает его снова красным. Необходимо полностью выйти из каплиdiv и снова перетащите в него, чтобы сделать его красным.

Можно ли предотвратитьdragleave от стрельбы при перетаскивании в дочерний элемент?

Обновление 2017 года: TL; DR, поиск CSSpointer-events: none; как описано в ответе @ H.D. ниже, это работает в современных браузерах и IE11.

Ответы на вопрос(9)

Ваш ответ на вопрос