2013-07-06 4 views
3

JSFiddleDraggable терпеть неудачу в Firefox

В этом простом примере, вы должны быть в состоянии перетащить красный прямоугольник в пунктирной области. Он работает в IE и в Chrome, но не в Firefox. Что действительно странно в том, что событие dragstart срабатывает (заставляя элемент скрываться), и все же ничего не происходит - даже не dragend (оставляя его скрытым и впоследствии непригодным для использования).

var source = null; 
document.getElementById('drag').addEventListener("dragstart",function(e) { 
    source = this; 
    e.dataTransfer.clearData(); 
    e.dataTransfer.effectAllowed = "move"; 
    setTimeout(function() {source.style.visibility = "hidden";},1); 
}); 
document.getElementById('drag').addEventListener("dragend",function(e) { 
    this.style.visibility = ""; 
    source = null; 
}); 
document.getElementById('drop').addEventListener("dragenter",function(e) { 
    if(source) { 
    if(e.preventDefault) e.preventDefault(); 
    return false; 
    } 
}); 
document.getElementById('drop').addEventListener("dragover",function(e) { 
    if(source) { 
    if(e.preventDefault) e.preventDefault(); 
    return false; 
    } 
}); 
document.getElementById('drop').addEventListener("drop",function(e) { 
    if(source) { 
    this.appendChild(source); 
    source = null; 
    } 
}); 

Я знаю, что этот код не является наиболее эффективным (злоупотребление getElementById когда я должен просто использовать его один раз, копирование вставленного обратного вызова для dragenter/dragover), но он получает через точку.

Я что-то не так?

ответ

3

ОБНОВЛЕНО

В соответствии с этой статьей here, я считаю, что проблема была эта линия

e.dataTransfer.setData('Text',''); //you need this so that your code will work on Firefox. 

прекрасно работает в этом JSFiddle

+0

Ах, так что это было. Я знал, что, должно быть, чего-то не хватает, я не понимал, что для Firefox требуется хотя бы некоторая форма данных. Все это имеет смысл сейчас! Спасибо! –

+0

Вы очень рад, рад помочь! –

+0

ссылка больше не работает ... и эта скрипка не работает для меня. Хм! – Ziggy

Смежные вопросы