Closed
Bug 619703
Opened 14 years ago
Closed 8 years ago
dragenter should be fired after dragleave
Categories
(Core :: DOM: Copy & Paste and Drag & Drop, defect)
Core
DOM: Copy & Paste and Drag & Drop
Tracking
()
RESOLVED
WORKSFORME
People
(Reporter: giorgio.liscio, Unassigned)
References
Details
Attachments
(2 files)
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0b8pre) Gecko/20101214 Firefox/4.0b8pre Build Identifier: see the incoming attachment! Reproducible: Always
Comment 2•14 years ago
|
||
What makes you think that dragenter should be fired after dragleave? From a quick skim of the spec, the opposite is true.
because with the "point of view" of the red box i'm still in "dragenter" for example if i want to set a different background on dragenter and restore the old one on dragleave i can not, because any descendant element fires dragleave after dragenter, so my red box listener thinks that the drag operation is leaved, but it is not mouseover and mouseout works as expected, and i think dragenter dragleave should do the same p.s. i dont want to use dragover, performing a single simple operation a lot of times is totally useless
semplified testcase <div class="item">X</div> <div id="cart"> <div class="item">A</div> <div class="item">B</div> <div class="item">C</div> </div> i drag the X over the cart i want to highlight the cart border so i use: cart.addEventListener("dragenter", function(){this.className = "draggingover";},true); cart.addEventListener("dragleave", function(){this.className = "";},true); but it does not works because when i drag over item A the dragenter event is fired then i drag over item B, the dragenter is fired on item B (***), after the dragleave is fired on element A at this point, the cart element have not highlighting (*** at this point i'm dragging over two elements with different trees at the same time :| ) to fix this i have to examine dom trees, set flags and other random things as in mouseover/mouseout happens the correct procedure should be: when i drag over item A the dragenter event is fired then i drag over item B, the item A receives dragleave, the item B receives dragenter p.s. it is a html5 spec bug, if you agree with me we need to submit a bug on their bugzilla
Updated•14 years ago
|
Comment 6•14 years ago
|
||
use event.relatedTarget
Comment 7•13 years ago
|
||
I reported the same problem in bugzilla nr 636503
Comment 10•12 years ago
|
||
@henry.fai.hang.chan: event.relatedTarget should always be null according to the W3C spec. The spec's `dragenter before dragleave` ordering is actually very helpful given that child elements cause the drop to leave its parent: [enter (parent), enter (child), leave (parent)] can be detected as mouse still in parent whereas [enter (parent), leave (parent), enter (child)] could cause mayhem — especially if the child element is removed when the drag leaves the parent!
Comment 12•8 years ago
|
||
This is the correct behaviour. The dragexit event is now in the spec however and functions in the order you expect. The correct order is: dragexit dragenter dragleave
Updated•8 years ago
|
Status: UNCONFIRMED → RESOLVED
Closed: 8 years ago
Resolution: --- → WORKSFORME
You need to log in
before you can comment on or make changes to this bug.
Description
•