Problem, który mam, polega na tym, że dragleave
zdarzenie elementu jest uruchamiane podczas najechania na element potomny tego elementu. Ponadto dragenter
nie 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ę div
czerwoną podczas przeciągania czegoś tam. To działa, ale jeśli przeciągniesz na p
dziecko, dragleave
zostanie ono zwolnione i div
nie będzie już czerwone. Przejście z powrotem do kropli div
również nie powoduje, że znów jest czerwone. Konieczne jest całkowite opuszczenie upuszczenia div
i przeciągnięcie z powrotem do niego, aby był czerwony.
Czy można zapobiec dragleave
uruchamianiu 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.