개요
다음 HTML 구조 를 가지고 있으며 요소에 dragenter
and dragleave
이벤트를 첨부했습니다 <div id="dropzone">
.
<div id="dropzone">
<div id="dropzone-content">
<div id="drag-n-drop">
<div class="text">this is some text</div>
<div class="text">this is a container with text and images</div>
</div>
</div>
</div>
문제
나는 통해 파일을 드래그 할 때 <div id="dropzone">
의 dragenter
예상대로 이벤트가 발생합니다. 그러나와 같은 자식 요소 위로 마우스를 움직이면 요소 <div id="drag-n-drop">
에 대해 dragenter
이벤트가 시작된 <div id="drag-n-drop">
다음 요소에 대해 dragleave
이벤트가 시작 <div id="dropzone">
됩니다.
<div id="dropzone">
요소 위로 다시 마우스를 가져 가면 dragenter
이벤트가 다시 시작되고 멋지지만 dragleave
방금 떠난 하위 요소에 대해 이벤트가 시작되므로 removeClass
명령이 실행되지만 멋지지 않습니다.
이 동작은 두 가지 이유로 문제가 있습니다.
나는
dragenter
&dragleave
에 첨부<div id="dropzone">
하기 때문에 어린이 요소에 왜 이러한 이벤트가 첨부되어 있는지 이해할 수 없습니다.나는
<div id="dropzone">
아이들을 가리킬 때 여전히 요소를 드래그 하고dragleave
있으므로 발사 하고 싶지 않습니다 !
jsFiddle
http://jsfiddle.net/yYF3S/2/ 와 함께 땜질하는 jsFiddle은 다음과 같습니다.
질문
따라서 ... <div id="dropzone">
요소 위로 파일을 드래그 할 때 dragleave
하위 요소를 드래그하더라도 실행되지 않도록하려면 어떻게해야합니까? <div id="dropzone">
요소를 떠날 때만 실행되어야합니다 . 요소의 경계 내에서 마우스를 움직이거나 끌어다 놓으면 이벤트가 트리거 되지 않아야 합니다 dragleave
.
적어도 HTML5 드래그 앤 드롭을 지원하는 브라우저에서 브라우저 간 호환이 가능해야 하므로이 답변 은 적합하지 않습니다.
Google과 Dropbox가 이것을 알아 낸 것처럼 보이지만 소스 코드가 축소 / 복잡해 구현에서이를 파악할 수 없었습니다.
e.stopPropagation();