On Mar 14, 2006, at 12:16 PM, Jim Ley wrote: > > "Maciej Stachowiak" <mjs@apple.com> >>> Inconsistency is very annoying for the author. >> >> 1) Safari, Firefox, Opera and IE all have live event listener >> attributes. > > IE does not, it only has live properties ie onclick=function() {} > works but setAttribute("onclick","alert(1)"); does not result in > an alert if you click it. (you can pass a function as the 2nd > parameter to setAttribute, but that would be non-conformant, and > doesn't work in any other UA) The fact that IE's setAttribute is buggy doesn't mean the attribute isn't live. It is. And in fact, passing a function value will be reflected in the DOM attribute's text value when you serialize the element. > > There are further differences, in Opera 8.5/9 and Mozilla: > > alert(document.body.getAttribute('onclick')); > document.body.onclick=function() { chicken() } > alert(document.body.getAttribute('onclick')); > > the getAttribute doesn't reflect the change to the onclick property > - but does result in the function being called not the attribute, > so the UA's are not simply re-executing the attribute at each point > in time, so it's not clear why changing the attribute should have > an effect. They don't "re-execute the attribute" but they do treat changes to the attribute as updating the event listener. The conceptual model doesn't involve executing the attribute at all, it is made into a function. The DOM has other areas where there is both an element attribute and a corresponding DOM attribute, and both have an effect when changed but changing the DOM property doesn't necessarily affect the attribute. In any case, this doesn't seem like a reason to reverse the behavior of setAttribute. > In firefox 1.5: > document.body.onclick=function() { alert(2) } > document.body.setAttribute('onclick','alert(3)'); > results in both 2 and 3 being alerted. > > So I don't really agree that there is great consistency in > setAttribute and event properties, none of the 3 I've tested here > interopate at all - given that I would prefer to say only the one > that is universal - the property, is the one that should be used > and setAttribute should not, as that provides maximum compatibilty. I agree that authors shouldn't set event listeners via setAttribute. But I don't think the spec should require setAttribute to have no effect on event listeners, since it does have an effect in current implementations. Regards, MaciejReceived on Tuesday, 14 March 2006 22:09:59 GMT
This archive was generated by hypermail 2.2.0+W3C-0.50 : Tuesday, 8 January 2008 14:18:53 GMT