为此做了一个小提琴:http://jsfiddle.net/terjeto/MN4FJ/

我的问题是,当您将文件从桌面拖到框内并拖到框内文本上方时,dragleave会触发。 (将文件拖到框内将使边框变实->将文件拖到框内的文本上,并且边框将变为虚线:->这不是我想要的)。

这是浏览器错误吗? (firefox 9 @ win)。

我还放入了一个鼠标上/下的框,效果很好,因此您可以将两者进行比较。

如何实现正确的Dragenter / Dragleave行为?

PS。我绑定(bind)到主体,因为我需要在实际应用中进行事件委托(delegate)。

最佳答案

这是该规范的有据可查的缺点。
As Peter-Paul Koch points out here

如果目标元素是要将文件拖放到的目标区域的子元素,则这样的函数可能会帮助您进行计算。

function isChildElement(parent, child) {
    var childParent = child;
    while (childParent) {
        if (childParent == parent) {
           return true;
        }
        childParent = childParent.parentNode;
    }
    return false;
},

08-06 14:46