【发布时间】:2013-04-04 18:28:36
【问题描述】:
我正在处理的项目有问题。它是一个 Web 应用程序,其界面部分存在于拖放元素之外。
问题是可拖动的 div 元素可以正常工作,但按钮元素不会在 Firefox 中进行拖动,但它们可以在 Chrome 中工作。我认为这可能与 Firefox 处理按钮已经存在的事件的方式有关,这可能与 Chrome 的处理方式不同。
我知道我可以使用 jQuery UI,但这个项目不允许我这样做。
这是我的问题的一个 jsfiddle: http://jsfiddle.net/MJN6c/6/
有谁知道如何让拖动事件在 Firefox 中的按钮上触发?
代码:
var stage = document.querySelector('#drop');
var btnsAni = document.querySelectorAll('.btn-ani');
[].forEach.call(btnsAni, function (btn) {
btn.addEventListener('dragstart', dragStart, false);
btn.addEventListener('dragend', dragEnd, false);
});
stage.addEventListener('dragenter', dragEnter, false);
stage.addEventListener('dragleave', dragLeave, false);
stage.addEventListener('dragover', dragOver, false);
stage.addEventListener('drop', dragDrop, false);
function dragStart(e) {
if (e.stopPropagation) e.stopPropagation();
e.dataTransfer.effectAllowed = 'copy';
e.dataTransfer.setData('Text', this.id);
return false;
}
function dragEnd(e) {
e.preventDefault();
if (e.stopPropagation) e.stopPropagation();
return false;
}
function dragEnter(e) {
e.preventDefault();
if (e.stopPropagation) e.stopPropagation();
return false;
}
function dragOver(e) {
e.preventDefault();
if (e.stopPropagation) e.stopPropagation();
e.dataTransfer.dropEffect = 'copy';
return false;
}
function dragLeave(e) {
e.preventDefault();
if (e.stopPropagation) e.stopPropagation();
return false;
}
function dragDrop(e) {
e.preventDefault();
if (e.stopPropagation) e.stopPropagation();
alert("Dropped!");
}
【问题讨论】:
-
常规的 jQuery 怎么样?
-
这可能是一种可能性,我得问问。但如果这是唯一(体面的)解决方案,我认为这不会有太大问题。
-
这是一个firefox bug,我找不到任何解决方法...您这边有什么更新吗?
标签: javascript firefox drag-and-drop