Problem, który mam, polega na tym, że dragleavezdarzenie elementu jest uruchamiane podczas najechania na element potomny tego elementu. Ponadto dragenternie jest uruchamiany po ponownym najechaniu na element nadrzędny z powrotem.
Zrobiłem uproszczone skrzypce: 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>
z następującym JavaScriptem:
$('#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");
}
});
Powinien to zrobić, powiadamiając użytkownika, czyniąc kroplę divczerwoną podczas przeciągania czegoś tam. To działa, ale jeśli przeciągniesz na pdziecko, dragleavezostanie ono zwolnione i divnie będzie już czerwone. Przejście z powrotem do kropli divrównież nie powoduje, że znów jest czerwone. Konieczne jest całkowite opuszczenie upuszczenia divi przeciągnięcie z powrotem do niego, aby był czerwony.
Czy można zapobiec dragleaveuruchamianiu podczas przeciągania do elementu potomnego?
Aktualizacja 2017: TL; DR, pointer-events: none;wyszukaj CSS zgodnie z opisem w odpowiedzi @ HD poniżej, która działa w nowoczesnych przeglądarkach i IE11.
dragleaveże w tym przypadku jest nadal uruchamiany.