2011-11-25 19 views
14

Yerel kullanıyorum ve javascript'te API'yi bırakın. Başarılı bir düşüşün ardından DOM'dan sürüklenen bir öğeyi nasıl kaldırabilirim?Javascript Sürükle ve Bırak: sürüklenen öğeyi başarılı bir şekilde izleyerek kaldırılıyor

  • Ben damla olay dinleme denedim ama bu sadece sürüklenen üzerine düştü ve eleman başvurusu yok edilir elemanı ateş alır.
  • dragend öğeyi dinlemeyi denedim, ancak bu bir düşüşün başarılı olup olmadığını bilmemize izin vermiyor.
  • Farklı bir sekme veya tarayıcı arasında bir sürükleme oluşması durumunda sorunlara neden olabileceğinden, öğenin global değişkende sürüklenmesini engellemeye çalışıyorum. kutuya sürüklenebilir harflerin http://jsfiddle.net/KNG6n/3/

    listesi:

İşte bir örnek. Bir mektubun düğümü kutunun üzerine düştüğünde, listeden çıkarılmasını isterim (aynı harfi içeren başka liste öğelerini etkilemeden)

cevap

11

dragend olayı dinleyin ve sürüklenen öğesiyle şey yapmadan önce dataTransfer nesnenin dropEffect değişkeni kontrol edin: Bir de sürüklenen

htmlElement.addEventListener('dragend', function(event){ 
    if(event.dataTransfer.dropEffect !== 'none'){ 
     $(this).remove(); 
    } 
}); 
+0

Görünüşe göre dropEffect, Windows'ta Chrome'da her zaman olmayacak, hata raporu yıllarca açık: https://code.google.com/p/chromium/issues/detail?id=39399 – marcelj

0

Bunu bir yolun dışında bir değişkene atamak bir yoldur. dragstart ve düştüğünde bu elemanı kullanın.

See this fiddle.

+0

Ben elemanı depolamak kaçınmaya çalışıyorum Global değişken, farklı sekmeler veya tarayıcılar arasında bir sürükle oluşması durumunda sorunlara neden olabilir. – lucas

4

Ayrıca, bu örnekte bir göz atın: http://html5demos.com/drag

var el = document.getElementById (e.dataTransfer.getData ('Metin'));

el.parentNode.removeChild(el); 
+0

Bu çözüm yalnızca tüm öğelerin kimlikleri varsa (benimki yok) çalışır. Ayrıca, verileri kullanışlı bir şey yerine kimlik olarak ayarlamanız gerektiği anlamına gelir. – lucas