Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Defering javascript - what is the correct html syntax defer or defer="defer"

What is the correct syntax for using the defer attribute in your javascript?

I have seen it done two ways:

1:

<script defer  >...</script>

2:

<script defer="defer">...</script>

From experience [and a reference I cannot find] I am more inclined to used the second option, but I just double checked the official w3c site and it seems that option 1 is correct.

Thanks

like image 481
Dai Bok Avatar asked Jun 18 '13 12:06

Dai Bok


3 Answers

defer is a boolean attribute [HTML 4.01 spec]:

Some attributes play the role of boolean variables (e.g., the selected attribute for the OPTION element). Their appearance in the start tag of an element implies that the value of the attribute is "true". Their absence implies a value of "false".

[...]

In HTML, boolean attributes may appear in minimized form -- the attribute's value appears alone in the element's start tag. Thus, selected may be set by writing:

<OPTION selected>

instead of:

<OPTION selected="selected">

Authors should be aware that many user agents only recognize the minimized form of boolean attributes and not the full form.

However, if you use XHTML, you have to use the second form since XHTML follows XML syntax where attributes always have to have a value.

like image 71
Felix Kling Avatar answered Oct 17 '22 03:10

Felix Kling


Since you reference HTML 4.01:

This is a Boolean Attribute. Both forms are correct, but the specification recommends the former.


If you were using XHTML then you would have to use the longer version.

HTML 5 also allows both versions and removes the recommendation to use one over the other (since for compatibility with XHTML served as text/html, all modern browsers can handle both syntaxes).

like image 27
Quentin Avatar answered Oct 17 '22 04:10

Quentin


HTML 5.1 nightly

2.4.2 Boolean attributes

A number of attributes are boolean attributes. The presence of a boolean attribute on an element represents the true value, and the absence of the attribute represents the false value.

If the attribute is present, its value must either be the empty string or a value that is an ASCII case-insensitive match for the attribute's canonical name, with no leading or trailing whitespace.

so defer is right, and so is defer="defer" and defer="DeFeR" and defer=""

like image 20
Esailija Avatar answered Oct 17 '22 03:10

Esailija