Firefox 3.6.x Drag&Drop 后部分属性丢失问题的解决方法
Friday, September 10, 2010 2:36:20 AM
以下是自己用 jQuery 的解决方法:
// 取得新 ID 的函数
var gOldIds = {};
function _getNewId() {
var nTime = (new Date()).getTime();
var sId = nTime + '';
var n = 1;
while(gOldIds[sId]) {
sId = nTime + '' + n;
n++;
}
gOldIds[sId] = 1;
return sId;
}
// 给 Drag&Drop 对象分配 ID 的函数
function _applyDDId($obj, newFlg) {
var id = $obj.attr('id');
if(!id || !/^dd/.test(id)) {
id = 'dd' + _getNewId();
$obj.attr('id', id);
}
return id;
}
// Drag&Drop 事件处理
var ddId, ddHtml;
$(document.body).unbind('dragstart').bind('dragstart', function(e){
var $target = $(e.target);
ddId = _applyDDId($target);
ddHtml = $target.outerHTML();
}).unbind('drop').bind('drop', function(e){
setTimeout(function(){
if(ddId) {
$('#' + ddId).replaceWith(ddHtml);
ddId = '';
ddHtml = '';
}
$ddTarget = null;
}, 10);
});
【追记】
问题发生开始于 Firefox 3.6.9 版本。
有人给 Mozilla 官方报告了这个 Bug:
https://bugzilla.mozilla.org/show_bug.cgi?id=596300







