Il semble que l'événement drop ne se déclenche pas quand je m'y attendais.
Je suppose que l'événement drop se déclenche lorsqu'un élément qui est glissé est libéré au-dessus de l'élément cible, mais cela ne semble pas être le cas.
Qu'est-ce que je ne comprends pas?
$('.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');
})
javascript
jquery
events
drag-and-drop
jquery-events
Doux duvet
la source
la source
Réponses:
Pour que l'événement drop se produise sur un élément div, vous devez annuler les événements
ondragenter
etondragover
. Utilisation de jquery et de votre code fourni ...Pour plus d'informations, consultez la page MDN .
la source
Vous pouvez vous en sortir simplement en faisant un
event.preventDefault()
sur l'dragover
événement. Cela déclenchera l'drop
événement.la source
Pour que l'événement drop se déclenche, vous devez attribuer un dropEffect pendant l'événement over, sinon l'événement ondrop ne sera jamais déclenché:
la source
event.originalEvent.dataTransfer.dropEffect = "copy"
car jQuery utilise le sienevent
Ce n'est pas une vraie réponse, mais pour certaines personnes comme moi qui manquent de discipline pour la cohérence. Drop ne s'est pas déclenché pour moi en chrome lorsque
effectAllowed
l'effet n'était pas celui que j'avais définidropEffect
. Cela a cependant fonctionné pour moi dans Safari. Cela devrait être défini comme ci-dessous:ev.dataTransfer.effectAllowed = 'move';
Alternativement,
effectAllowed
peut être défini commeall
, mais je préférerais garder la spécificité là où je peux.pour un cas où l'effet de chute est un mouvement:
ev.dataTransfer.dropEffect = 'move';
la source