> <meta charset="utf-8"><span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse; "> but it's invalid to set it to anything other than the two values I just mentioned.</span><br>

<br><div>That's the part I'd like to see changed.  I understand that if it's present, it's on.  So, why can't async="true" be valid?  I think all browser vendors will implement it that way anyway.  They'd be crazy not to.</div>

<div><br></div><div>-Brian</div><div><br></div><div><br><div><br></div><div><br></div><div><br><div class="gmail_quote">On Tue, Dec 8, 2009 at 1:41 PM, Tab Atkins Jr. <span dir="ltr"><<a href="mailto:jackalmage@gmail.com">jackalmage@gmail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div><div></div><div class="h5">On Tue, Dec 8, 2009 at 1:49 PM, Brian Kuhn <<a href="mailto:bnkuhn@gmail.com">bnkuhn@gmail.com</a>> wrote:<br>


> How do I correctly set a boolean attribute on a DOM element object in<br>
> Javascript?<br>
> var script = document.createElement('script');<br>
><br>
> script.async = true;        // makes the most sense, but appears go against<br>
> the spec<br>
> script.async = 'true';       // worse, but not bad, but also appears to go<br>
> against the spec<br>
> script.async = '';            // sets to empty string, but what does that<br>
> really mean?<br>
> script.async = 'async';   // sets async = async, which is weird and verbose<br>
><br>
> And then you have the debate on setting the property directly versus using<br>
> setAttribute.  Any thoughts on that?<br>
><br>
> To me, boolean attributes seem to break the rule of least surprise.  I find<br>
> it very hard to believe people will understand:<br>
> <script async="" src="..."></script>    or   <script async="async"<br>
> src="..."></script><br>
> more than:<br>
> <script async="true" src="..."></script><br>
<br>
</div></div>Setting an attribute foo to '' or 'foo' is the correct way.  To unset<br>
it, remove the attribute entirely.<br>
<br>
This is mostly unchangeable now, because it's how HTML and XHTML have<br>
worked for a long time.  XHTML requires the longer foo="foo" form, and<br>
in HTML writing an element like <bar foo> will give the element an<br>
attribute "foo" with the value of the empty string.  Thus those are<br>
the two proper ways to set it.  For compatibility reasons setting<br>
*any* value on the attribute sets it (it's set or not based purely on<br>
the presence or absence of the attribute itself, not the value of the<br>
attribute), but it's invalid to set it to anything other than the two<br>
values I just mentioned.<br>
<br>
If authors are writing HTML, they can just do <script async src="…">.<br>
Simple and easy.<br>
<font color="#888888"><br>
~TJ<br>
</font></blockquote></div><br></div></div>