크롬에서 실행되지 않는 드롭 이벤트


93

예상 할 때 드롭 이벤트가 트리거되지 않는 것 같습니다.

드래그되는 요소가 대상 요소 위에 놓일 때 드롭 이벤트가 발생한다고 가정하지만, 그렇지 않은 것 같습니다.

내가 무엇을 오해하고 있습니까?

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');
})


답변:


200

드롭 이벤트가 div 요소에서 발생하도록하려면 ondragenterondragover이벤트를 취소해야 합니다. jquery 및 제공된 코드 사용 ...

$('.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();
})

자세한 내용 은 MDN 페이지를 확인 하세요 .


11
ondragenter가 필요하지 않고 ondragover 만 필요합니다.
access_granted

1
적어도 최신 Chrome에서 이미지를 드래그 할 때는 여전히 이동하지 않습니다.
NoBugs

2
그럼에도 불구하고 최근에 작동하지 않습니다 크롬 (비발디 1.2.490.39 () (32 비트) jsfiddle.net/f282n3pt/3
mcsdwarken

2
reactjs를 사용하면 동일한 요소에 onDragOver 핸들러를 추가해야합니다.
CHAN

5
html5 dnd API가 정말 그렇게 나쁜가요?
bartosz.baczek

47

이벤트 event.preventDefault()에 참여하는 것만으로도 벗어날 수 있습니다 dragover. 이렇게하면 drop이벤트가 시작됩니다.


2
커버되지 않은 경우가있는 경우, dragenter에서도 e.preventDefault ()를 호출해야합니다. 내 다른 의견을 참조하십시오
zupa

5

drop 이벤트가 발생하려면 over 이벤트 중에 dropEffect를 할당해야합니다. 그렇지 않으면 ondrop 이벤트가 트리거되지 않습니다.

$('.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
사실 당신은 할 필요가 event.originalEvent.dataTransfer.dropEffect = "copy"jQuery를 자체 사용하기 때문에event
AymKdn

1

이것은 실제적인 대답은 아니지만 일관성에 대한 규율이 ​​부족한 저와 같은 사람들에게 있습니다. Drop은 effectAllowed내가 설정 한 효과 가 없었을 때 크롬에서 나를 위해 발사하지 않았습니다 dropEffect. 그러나 Safari에서는 작동했습니다. 다음과 같이 설정해야합니다.

ev.dataTransfer.effectAllowed = 'move';

또는 effectAllowed로 설정할 수 all있지만 가능한 한 특정 성을 유지하는 것이 좋습니다.

드롭 효과가 이동 인 경우 :

ev.dataTransfer.dropEffect = 'move';

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.