[whatwg] boolean attributes in javascript

Brian Kuhn bnkuhn at gmail.com
Tue Dec 8 17:45:49 PST 2009


Thanks Tab, and everyone else.  This has been enlightening!


On Tue, Dec 8, 2009 at 3:22 PM, Tab Atkins Jr. <jackalmage at gmail.com> wrote:

> Some clarification is in order; I didn't answer fully and was
> corrected elsewhere.
>
> There are two distinct notions of attributes here.  The first, the
> "content attribute", is what you're manipulating when you do
> foo.setAttribute() or foo.getAttribute().  The second, the "IDL
> attribute" (may be called "DOM attribute" or "property" in some
> places) is what you're manipulating when you do foo.bar (where foo is
> an element and bar is an attribute name).
>
> The content attribute can exist or not; if it exists, it's considered
> 'on', and if it doesn't it's considered 'off'.  It's a string, and if
> specified must be one of the two values I mentioned previously.
>
> The IDL attribute is a boolean.  It's either true or false.  Setting
> it to true will set the content attribute, and setting it to false
> will remove the content attribute.
>
> So "script.async=true" is valid and does what you would expect.
> Similarly, "script.async=false" is valid and does what you would
> expect.  "script.setAttribute('async','true')" is invalid, but still
> makes the element async.  "script.setAttribute('async','false')" is
> invalid, and also makes the element async, which is not what you would
> naively expect.
>
> If you want to get more confusing, "script.async='true'" makes the
> element async, because in javascript non-empty strings evaluate as
> true.  However, "script.async='false'" would also make it async, while
> "script.async=''" doesn't.  You have to pay attention to what you're
> actually dealing with.
>
> ~TJ
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.whatwg.org/pipermail/whatwg-whatwg.org/attachments/20091208/37461bce/attachment-0002.htm>


More information about the whatwg mailing list