为什么HTML5拖放不在Firefox中工作?

时间:2013-09-27 16:01:51

标签: html5 drag-and-drop

我已将事件绑定到不同的元素,当我在除Firefox之外的所有浏览器中拖动它时,它按预期工作。但是,在Firefox中,它根本不起作用。触发的唯一事件是dragstart,并且没有其他事件触发。发生了什么事?

5 个答案:

答案 0 :(得分:31)

Firefox要求用户在事件中运行dataTransfer.setData函数。

对于jQuery个用户,这意味着以下代码可以解决您的问题:

function dragstartHandler(event){

  event.originalEvent.dataTransfer.setData('text/plain', 'anything');

}

同一拖动的未来事件现在将按预期正常启动。显然,您可以用更有用的数据替换setData参数。

答案 1 :(得分:30)

我没有使用jQuery,因此删除了originalEvent部分并将格式更改为文本(或IE有问题),并且它可以工作:

event.dataTransfer.setData('text', 'anything');  

在drop事件中,请务必致电:

event.preventDefault();

或者它会跳转到anything.com。

答案 2 :(得分:6)

使用某些鼠标事件时,FF存在长期存在的问题,这些事件源自溢出设置为自动或滚动的元素。

在我的情况下,我有一个很好用的拖放库,在样本和我的应用程序中完美地运行在每个浏览器上但是firefox。在深入了解与此相关的门票后,我找到了一个解决方案,我完全赞同这张票的贡献者https://bugzilla.mozilla.org/show_bug.cgi?id=339293

即设定 -moz-user-select:none

在被拖动的滚动元素上。它解决了我的特殊问题。

答案 3 :(得分:2)

您可以将此作为此问题解决方案的参考,以解决在Firefox上发生的重定向问题。

您需要阻止drop方法中的默认操作来解决此问题。

function drop(e) {
    if(e.preventDefault) { e.preventDefault(); }
    if(e.stopPropagation) { e.stopPropagation(); }

    //your code here

    return false;
}

我从this link得到了这个解决方案。

答案 4 :(得分:1)

使用此

IE:

event.dataTransfer.setData('text', '');

Firefox:

event.dataTransfer.setData('text/plain', '');