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