- From: Thomas Broyer <t.broyer@gmail.com>
- Date: Wed, 9 Dec 2009 00:27:34 +0100
On Tue, Dec 8, 2009 at 8:49 PM, Brian Kuhn <bnkuhn at gmail.com> wrote: > How do I correctly set a boolean attribute on a DOM element object in > Javascript? > var script = document.createElement('script'); > > script.async = true; ? ? ? ?// makes the most sense, but appears go against > the spec > script.async = 'true'; ? ? ? // worse, but not bad, but also appears to go > against the spec > script.async = ''; ? ? ? ? ? ?// sets to empty string, but what does that > really mean? > script.async = 'async'; ? // sets async = async, which is weird and verbose The WebIDL snippet in [1] defines the property as being of type 'boolean', and WebIDL defines how it is to be bound in ECMAScript [2], which in turn defers to ECMAScript for the ToBoolean conversion [3] (?9.2 in both ES3 and ES5, which have identical behavior) So you'd do script.async=true. script.async = 'true' would also work, but script.async = 'false' would actually set it to true, as well as script.async = 'async'. script.async = '' would set it to false. [1] http://dev.w3.org/html5/spec/Overview.html#script ("DOM interface") [2] http://dev.w3.org/2006/webapi/WebIDL/#es-boolean [3] http://www.ecma-international.org/memento/TC39-M.htm > And then you have the debate on setting the property directly versus using > setAttribute. ?Any thoughts on that? Use properties, it's so easier! > To me, boolean attributes seem to break the rule of least surprise. ?I find > it very hard to believe people will understand: > <script async="" src="..."></script> ? ?or ? <script async="async" > src="..."></script> > more than: > <script async="true" src="..."></script> Most people would simply srite <script src="..." async></script> Boolean attributes work that way since very early versions of HTML, because of a feature of SGML that allows the value to be omitted when it's the same as the attribute name (I'm not an SGML expert, someone correct me if I'm wrong; what I'm saying is that it's the way to go in SGML): <input disabled> <input readonly> <img ismap> etc. -- Thomas Broyer /t?.ma.b?wa.je/
Received on Tuesday, 8 December 2009 15:27:34 UTC