- From: Maciej Stachowiak <mjs@apple.com>
- Date: Tue, 14 Mar 2006 10:22:48 -0800
- To: Sergey Ilinsky <sergey@backbase.com>
- Cc: public-webapi@w3.org
On Mar 14, 2006, at 3:30 AM, Sergey Ilinsky wrote: > - > > <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) I'm no sure what you mean. The contents of the DOM are based on the markup, and many markup attribute changes set via setAttribute[NS] are also reflected as changes to rendering and DOM behavior. For example, setting the "style" attribute to "width:800; height: 800;" will indeed affect width and height. This is also a behavior that all browsers have (although IE's setAttribute/getAttribute are broken, so you have to pass a function value instead of a string. > 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? In DOM Level 2 Events, the order in which event listeners trigger was undefined. DOM Level 3 Events will specify an ordering, which is the order in which they are added. I think setting the onclick JS property counts as adding an event listener, and my proposal certainly defined it as such, so the Firefox order would compl with the new spec. IE does not even comply with DOM Level 2 Events so it is hard to draw comparisons. Regards, Maciej
Received on Tuesday, 14 March 2006 19:51:46 UTC