>  but it's invalid to set it to anything other than the two values I just
mentioned.

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.

-Brian





On Tue, Dec 8, 2009 at 1:41 PM, Tab Atkins Jr. <jackalm...@gmail.com> wrote:

> On Tue, Dec 8, 2009 at 1:49 PM, Brian Kuhn <bnk...@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
> >
> > And then you have the debate on setting the property directly versus
> using
> > setAttribute.  Any thoughts on that?
> >
> > 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>
>
> Setting an attribute foo to '' or 'foo' is the correct way.  To unset
> it, remove the attribute entirely.
>
> This is mostly unchangeable now, because it's how HTML and XHTML have
> worked for a long time.  XHTML requires the longer foo="foo" form, and
> in HTML writing an element like <bar foo> will give the element an
> attribute "foo" with the value of the empty string.  Thus those are
> the two proper ways to set it.  For compatibility reasons setting
> *any* value on the attribute sets it (it's set or not based purely on
> the presence or absence of the attribute itself, not the value of the
> attribute), but it's invalid to set it to anything other than the two
> values I just mentioned.
>
> If authors are writing HTML, they can just do <script async src="…">.
> Simple and easy.
>
> ~TJ
>

Reply via email to