- From: Sergey Ilinsky <sergey@backbase.com>
- Date: Tue, 14 Mar 2006 12:30:47 +0100
- To: "Maciej Stachowiak" <mjs@apple.com>
- Cc: <public-webapi@w3.org>
- Message-ID: <010901c6475a$bd6b6a80$8132a8c0@vientiane>
--- Maciej Stachowiak <mjs@apple.com> wrote: > > > On Mar 14, 2006, at 1:01 AM, Sergey Ilinsky wrote: > > > Hello everyone, > > > > To the discussion kept here I'd like to add > several important > > issues that have not been yet taken into > consideration. > > > > 1) Event listeners can not (and I also believe > should not) be > > capable of changing by modification of element > attributes > > With the following test case, Safari, Firefox and > Opera respect the > DOM change and reflect it with a changed event > handler: > > > <div id="a" onclick="alert('original')" > style="width: 200; height: > 200; background-color: red;"></div> > <br> > <br> > <div id="b" > onclick="document.getElementById('a').setAttribute > ('onclick', 'alert(\'new\')');"> > click here to change above listener > </div> > got it. but i would not think of this behaviour as of correct one since script (elements/properties etc.) has not that much to do with markup (tags/atributes) > > > 2) Since element can have any amount of listeners > of the same > > event type attached, the construction > > element.on<handler> = fHandler; > > becomes ambigous (what is being reassigned by > this call - a > > collection or the last one listener added or > something else?). > > This is to be defined. > > <element onsomeevent=""> and element.onsomeevent = > fHandler refer to > a single, unique listner per element. There is > exactly one such "html > event listener" per event per element, but there can > be any number of > addEventListener-added listeners at the same time. > Well, still there is problem of event handlers processing order: Suppose you added several listeners to an element by calling addEventListener (for FF) or attachEvent (for IE). element.addEventListener("click", function(event){alert(1)}, false); element.addEventListener("click", function(event){alert(2)}, false); element.addEventListener("click", function(event){alert(3)}, false); or element.attachEvent("onclick", function(event){alert(1)}); element.attachEvent("onclick", function(event){alert(2)}); element.attachEvent("onclick", function(event){alert(3)}); And now you are trying to modificate the property of the element corresponding to "html handler" element.onclick = function(event){alert(4)}; in FF you will get 1234 after clicking on element and in IE yo will get 4123. What is the proper way (i guess FF)? Should it be defined? > > 3) The current order of handlers execution is > different in > > different browsers > > (take onload event that is first handled on > window and then on > > body in IE, while fired first on body and then on > window in Mozilla) > > The load event does not fire on the body at all in > Mozilla, as far as > I know. The following test case shows only "window". > Same in the > latest builds of Safari. Opera fires body, then > window, then > document, which seems weird. IE doesn't have > addEventListener so this > test case won't work. > > <html> > <body> > <script> > window.addEventListener("load", function() { > alert('window'); }, false); > document.addEventListener("load", function() { > alert('document'); }, > false); > document.documentElement.addEventListener("load", > function() { alert > ('html element'); }, false); > document.body.addEventListener("load", function() { > alert('body > element'); }, false); > </script> > </body> > </html> > > > > 4) The scope of execution is currently very > chaotic and very > > dependent on event types > > For example when handling onload/onunload event > handlers, "this" > > object in IE points to window, while handlers for > other event types > > properly get their scope of element objects. > > I don't think it is chaotic in other browsers. But > most browsers do > treat the onload property of <body> as creating a > load event listener > on the window, not the body. So the "this" object > binding isn't > arbitrary, it just reflects the true target of the > event. > > But I think specifying events on the window object > is probably out of > scope for DOM Level 3 Events. > > > > I think the scope should never be dependent on > the type of > > event and in any case get the scope of DOMElement > Node to which the > > listener was added. > > I'm assuming you mean this only for onfoo > attribute-based event > listeners. This wouldn't be compatible with what > browsers currently > do. But I think the html <body> and <html> elements > might be the only > special cases. Perhaps also <frameset>. > > Regards, > Maciej > > > > > > > > > Sergey Ilinsky, > > Core Architect, > > BackBase B.V. > > > > --- Jonas Sicking <jonas@sicking.cc> wrote: > > > > > > Maciej Stachowiak wrote: > > > > Hi everyone, > > > > > > > > This action item was assigned to me while I > wasn't > > > present, so I'm not > > > > sure what it means. I could imagine the > following > > > possible things > > > > intended to be covered: > > > > > > > > 1) Define scope chain for event listeners > attached > > > via HTML event > > > > attributes, e.g. <img > > > onclick="handleClick(event)">. > > > > 2) Define `this' binding behavior for #1. > > > > 3) Define scope chain for events attached via > HTML > > > DOM properties, e.g. > > > > myImage.onclick = handleClick > > > > 4) Define `this' binding behavior for #3. > > > > 5) Define scope chain for events attached via > > > addEventListener(). > > > > 6) Define `this' binding for #5 (already > done). > > > > 7) Define scope chain for event listeners > attached > > > via SVG 1.1 event > > > > attributes, e.g. <image > > > onclick="handleClick(event)">. > > > > 8) Define `this' binding behavior for #1. > > > > > > > > I do not feel like I have the relevant > expertise > > > to answer 7 and 8, but > > > > I can try to do some research if it is > desirable > > > to define those. > > > > > > Ideally I would hope that we can define 7 and 8 > to > > > be as similar to 1 > > > and 2 as possible, to reduce author confusion > and > > > make CDF more sane. > > > > > > > Here's brief outlines of the behavior I would > > > propose. I have not tested > > > > thoroughly or written any of this up in formal > > > language, so please let > > > > me know which ones need testing and formal > > > language. > > > > > > > > 1) The attribute text is coverted to a > function as > > > if it were the result > > > > of the following expression evaluated in > global > > > scope, where ELT is the > > > > DOM object representing the element: > > > > > === message truncated ===
Received on Tuesday, 14 March 2006 11:31:06 UTC