尽管仔细阅读了Mozilla开发者网络文档,以及我在堆栈溢出中找到的任何答案,仍然无法获得HTML5在Firefox中的拖放工作。我在AngularJS应用程序中使用它。在Chrome和Internet Explorer中一切正常,但Firefox(v33.1)无法正常运行。我宁愿不必诉诸使用jQueryUI。HTML5的拖放,在Firefox中没有触发的“拖放”事件
希望有人能在这里发现我失踪的东西。正如你在下面的代码中看到的那样,我已经为每个事件处理程序添加了一些console.log()调用,以检查每个事件是否按预期发射。在Firefox中,除“drop”事件外,所有事件都会被触发。
这里是我的代码的简化版本:
var assignEvents = function() {
var rows = angular.element('.row');
if (self.rows.length > 0) {
// event handlers for rows
angular.forEach(self.rows, function(row, key) {
angular.element(row)
// clear any existing bindings
.off('dragstart')
.off('dragenter')
.off('dragover')
.off('dragleave')
.off('drop')
.off('dragend')
// add bindings
.on('dragstart', handleDragStart)
.on('dragenter', handleDragEnter)
.on('dragover', handleDragOver)
.on('dragleave', handleDragLeave)
.on('drop', handleDrop)
.on('dragend', handleDragEnd);
});
}
};
// event handlers
var handleDragStart = function(e) {
console.log("dragStart");
e.stopPropagation();
this.style.opacity = 0.4;
e.originalEvent.dataTransfer.setData('text/plain', this.id);
e.originalEvent.dataTransfer.effectAllowed = 'link';
e.originalEvent.dataTransfer.dropEffect = 'link';
};
var handleDragEnter = function(e) {
e.preventDefault();
e.stopPropagation();
console.log("dragEnter");
return false;
};
var handleDragOver = function(e) {
e.preventDefault();
e.stopPropagation();
console.log("dragOver");
return false;
};
var handleDragLeave = function(e) {
e.preventDefault();
e.stopPropagation();
console.log("dragLeave");
return false;
};
var handleDrop = function(e) {
console.log("drop");
};
var handleDragEnd = function(e) {
console.log("dragEnd");
e.stopPropagation();
e.preventDefault();
this.style.opacity = 1;
};
assignEvents();
感谢saqib,但我不想将任何新库添加到除Angular以外的应用程序。 – 2014-12-02 16:44:09