Javascript HTML5 Dragend事件没有';不要在firefox中开火
我在drag start上做了一些更改,如果drop失败,我想恢复这些更改。我在一个由dragend触发的函数中编写了这个逻辑。这在Chrome中非常有效,但在firefox中不会触发“Dragend”事件 有人能告诉我一些关于这种行为的情况吗?我在乌班图上使用firefox 22.0 代码如下Javascript HTML5 Dragend事件没有';不要在firefox中开火,javascript,jquery,html,drag-and-drop,Javascript,Jquery,Html,Drag And Drop,我在drag start上做了一些更改,如果drop失败,我想恢复这些更改。我在一个由dragend触发的函数中编写了这个逻辑。这在Chrome中非常有效,但在firefox中不会触发“Dragend”事件 有人能告诉我一些关于这种行为的情况吗?我在乌班图上使用firefox 22.0 代码如下 $(".view-controller").on("dragover", that.dragOverMain); $(".view-controller").on("dragenter"
$(".view-controller").on("dragover", that.dragOverMain);
$(".view-controller").on("dragenter", that.dragEnterMain);
$(".view-controller").on("dragexit dragleave", that.dragExitMain);
$(".view-controller").on("dragend", that.dragEndMain);
$(".view-controller").on("drop", that.dropMain);
$(".view-controller").children().on("dragstart", function(e) {
that.dragStartChild(e);
});
$(".view-controller").children().on("dragend", function(e) {
that.dragEndMain(e);
});
dragStartChild: function(e) { console.log('dragStartChild'); },
dragEndMain: function(e) { console.log('dragEndMain'); e.preventDefault(); },
dropMain: function(e) { console.log('dropMain'); e.preventDefault(); },
dragExitMain: function(e) { console.log('dragExitMain'); e.preventDefault(); },
dragEnterMain: function(e) { console.log('dragEnterMain'); e.preventDefault(); },
dragOverMain: function(e) { console.log('dragOverMain'); e.preventDefault(); },
试试这个
<div ondragend="dragEndMain(event)" class="viewcontroller">
<!-- some html -->
</div>
基本上是用html本身绑定javascript事件。Firefox要求在dragstart
事件中设置拖动数据(event.dataTransfer.setData(…)
)。如果不设置此数据,dragstart
事件将触发,但dragend
事件不会触发
:
要使另一个HTML元素可拖动,必须做三件事:
<div draggable="true" ondragstart="event.dataTransfer.setData('text/plain', 'This text may be dragged')">
This text <strong>may</strong> be dragged.
</div>
此文本可以拖动。
值得在此补充的是,Firefox有一个bug,如果您在拖放功能中移动或删除DOM元素,就会导致dragend无法启动
将DOM操作移动到我调用的dragend方法中,为我解决了这个问题。也许:顺便说一句,为什么不提供相关代码?一个JSFIDLE会很好…谢谢,但我已经应用了prevent Default,它没有调用,可能是其他的东西,我在这里编辑了代码。我还注意到esc键在mozila中取消了拖动,但在chromeAt中至少不能更改你的
ev.preventDefault()代码>到e.preventDefault()
因为您命名了事件变量e
。这是一个psuedo代码,正如在常规函数中一样,我使用了一个不同的变量ev,它保存了mozila中的事件和其他函数中的e.orignalevent中的事件