I've noticed a rather interesting behavior in Mozilla, one which the DOM 2 Events Recommendation and the DOM 3 Events Last Call Working Draft from W3C do not cover. Basically, when I replace the actual event target (or likely any ancestor node of the actual target) with another node, the DOM specs are not clear on correct behavior. I'm attaching two testcases, an XUL testcase and an XHTML testcase. The XUL testcase is more descriptive, but the XHTML testcase will render in non-Gecko based browsers as well. I believe there is at least one bug in the behaviors of the browser here; I'm just not sure what exactly is "wrong" and what is "correct".
jst: thought you'd like to see this, as a member of the DOM WG.
Running the XUL testcase, the third step, it shows the event propagating through foo_menu, not bar_menu. This is clearly a bug.
Alex, could you send a request to the DOM WG (email@example.com) to clarify the intended behavior in the DOM Events specification?
http://lists.w3.org/Archives/Public/www-dom/2003JanMar/0022.html The DOM WG's response. I think Mr. Hegaret is telling us that for the XUL testcase's second part, the Event object should still go to the target node.
This is how KHTML handles event propagation: http://lxr.kde.org/source/kdelibs/khtml/xml/dom_nodeimpl.cpp#L416 But is that a bit slow way to do it, creating a node chain for each event...
Created attachment 179456 [details] Create event target chain in stack Any comments on this one? The idea is to create an event target chain in stack before starting to handle the event. This would be quite big change to event handling, but I think something like this is needed. And hopefully it wouldn't slow down the event handling.
Yes, something like this is absolutely needed; there is no other way to implement the spec. Yes, this would be a major change to event handling (and need changes to all the HandleDOMEvent mathods, if nothing else). See bug 234455. Any such code should go there, probably.
fixed in bug 234455