Masalah yang saya alami adalah bahwa dragleave
peristiwa elemen dipecat ketika melayang elemen anak dari elemen itu. Juga, dragenter
tidak dipecat ketika melayang kembali elemen induk lagi.
Saya membuat biola yang disederhanakan: 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>
dengan JavaScript berikut:
$('#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");
}
});
Apa yang seharusnya dilakukan adalah memberi tahu pengguna dengan membuat drop div
red saat menyeret sesuatu ke sana. Ini bekerja, tetapi jika Anda menyeret ke p
anak, dragleave
itu dipecat dan div
tidak merah lagi. Kembali ke drop div
juga tidak membuatnya merah lagi. Sangat penting untuk keluar sepenuhnya dari drop div
dan menyeret kembali ke dalamnya untuk membuatnya merah.
Apakah mungkin untuk mencegah dragleave
menembak ketika menyeret elemen anak?
Pembaruan 2017: TL; DR, Cari CSS pointer-events: none;
seperti dijelaskan dalam jawaban @ HD di bawah ini yang berfungsi di browser modern dan IE11.
dragleave
masih menyala dalam kasus itu.