【发布时间】:2011-10-29 22:26:48
【问题描述】:
我遇到的问题是当悬停该元素的子元素时会触发该元素的 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 年更新: TL;DR,查找 CSS pointer-events: none;,如下面 @H.D. 的回答中所述,适用于现代浏览器和 IE11。
【问题讨论】:
-
截至 2012 年 5 月,pimvdb 报告的错误仍然存在于 Webkit 中。我还通过在 dragover 中添加一个类来反驳它,因为它经常触发,所以它不是很好,但出现稍微修补一下问题。
-
@ajm:谢谢,这在一定程度上有效。但是,在 Chrome 上,进入或离开子元素时会出现闪烁,大概是因为在这种情况下仍然会触发
dragleave。 -
我开了一个jQuery UI bug 欢迎upvotes,这样他们就可以决定把资源放在上面
-
@fguillen:很抱歉,这与 jQuery UI 无关。事实上,甚至不需要 jQuery 来触发 bug。我已经提交了一个 WebKit 错误,但目前还没有更新。
-
@pimvdb,是的,我已经在我的错误中看到了答案,这是指向您的 WebKit 错误的链接?...我如何使用 FireFox 重现相同的错误:/
标签: javascript jquery html drag-and-drop jquery-events