Drop olayı kromda tetiklenmiyor


93

Görünüşe göre düşme olayı beklediğimde tetiklenmiyor.

Sürüklenen bir öğe hedef öğenin üzerinde bırakıldığında drop olayının tetiklendiğini varsayıyorum, ancak bu durum böyle görünmüyor.

Neyi yanlış anlıyorum?

http://jsfiddle.net/LntTL/

$('.drop').on('drop dragdrop',function(){
    alert('dropped');
});
$('.drop').on('dragenter',function(){
    $(this).html('drop now').css('background','blue');
})
$('.drop').on('dragleave',function(){
    $(this).html('drop here').css('background','red');
})


Yanıtlar:


201

Drop olayının bir div öğesinde gerçekleşmesi için ondragenterve ondragoverolaylarını iptal etmeniz gerekir . Jquery ve sağlanan kodun kullanılması ...

$('.drop').on('drop dragdrop',function(){
    alert('dropped');
});
$('.drop').on('dragenter',function(event){
    event.preventDefault();
    $(this).html('drop now').css('background','blue');
})
$('.drop').on('dragleave',function(){
    $(this).html('drop here').css('background','red');
})
$('.drop').on('dragover',function(event){
    event.preventDefault();
})

Daha fazla bilgi için MDN sayfasına bakın .


11
Ondragenter'a ihtiyacınız yok, sadece ondragover'a ihtiyacınız var.
access_granted

1
Yine de, en azından görüntüleri en son Chrome'da üzerine sürüklerken devam etmiyor.
NoBugs

2
En son Chromium'da (Vivaldi 1.2.490.39 () (32-bit) jsfiddle.net/f282n3pt/3
mcsdwarken

2
Reactjs ile aynı elemana onDragOver işleyicisini eklemeniz gerekir.
CHAN

5
Html5 dnd API gerçekten BU kadar kötü mü?
bartosz.baczek

47

Sadece bir yapıyor kurtulabilir event.preventDefault()üzerine dragoverolay. Bunu yapmak dropolayı ateşleyecektir .


2
ortaya çıkarılan bir uç durumu var, dragenter'da da e.preventDefault () 'u çağırmalısınız, diğer
yorumuma

5

Drop olayının tetiklenmesi için over olayı sırasında bir dropEffect atamanız gerekir, aksi takdirde ondrop olayı asla tetiklenmez:

$('.drop').on('dragover',function(event){
    event.preventDefault();
    event.dataTransfer.dropEffect = 'copy';  // required to enable drop on DIV
})
// Value for dropEffect can be one of: move, copy, link or none
// The mouse icon + behavior will change accordingly.

8
Aslında yapmanız gerekiyor event.originalEvent.dataTransfer.dropEffect = "copy"çünkü jQuery kendi kullanıyorevent
AymKdn

1

Bu gerçek bir cevap değil ama benim gibi tutarlılık disiplininden yoksun olan bazı insanlar için. Damla benim için effectAllowedbelirlediğim etki olmadığında kromda ateş etmedi dropEffect. Ancak Safari'de benim için çalıştı. Bu, aşağıdaki gibi ayarlanmalıdır:

ev.dataTransfer.effectAllowed = 'move';

Alternatif olarak, effectAllowedolarak ayarlanabilir all, ancak özgüllüğü elimden geldiğince tutmayı tercih ederim.

düşme efektinin hareket ettiği bir durum için:

ev.dataTransfer.dropEffect = 'move';

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.