ปัญหาที่ฉันมีคือ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 Update: TL; DR, ค้นหา CSS pointer-events: none;
ตามที่อธิบายไว้ในคำตอบของ @ HD ด้านล่างซึ่งใช้งานได้ในเบราว์เซอร์สมัยใหม่และ IE11
dragleave
ยังคงมีการยิงในกรณีนี้