我遇到的问题是,一个元素的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");
}
});
它应该做的是在拖拽一些东西时,通过将drop div
设置为红色来通知用户。这是有效的,但如果你拖到p
子对象中,dragleave
将被触发,而div
不再是红色的。移动回drop div
也不会使它再次变为红色。有必要完全移出drop div
并再次拖回它以使其为红色。
是否有可能防止dragleave
在拖拽到子元素时触发?
2017年更新: TL;DR,查找CSS pointer-events: none;
,如@ h.d.所述。在现代浏览器和IE11中都能运行。