W3C home > Mailing lists > Public > www-html@w3.org > July 2008

Re: name="" deprecated in XHTML

From: Benjamin Hawkes-Lewis <bhawkeslewis@googlemail.com>
Date: Tue, 01 Jul 2008 07:56:28 +0100
Message-ID: <4869D51C.7040504@googlemail.com>
To: Sebastian Mendel <lists@sebastianmendel.de>
CC: Johannes Koch <koch@w3development.de>, www-html@w3.org

Sebastian Mendel wrote:
> isn't it common to use
> 
> <input type="radio" name="color" value="red" />
> <input type="radio" name="color" value="blue" />
> 
> or
> 
> <input type="checkbox" name="color[]" value="red" />
> <input type="checkbox" name="color[]" value="blue" />

Yes.

> so isn't it confusing to say on other elements ID and NAME share same 
> space and name has to be unique?

No, since the spec as Johannes Koch quoted lists which elements this 
rule applies to:

"The id and name attributes share the same name space. This means that 
they cannot both define an anchor with the same name in the same 
document. It is permissible to use both attributes to specify an 
element's unique identifier for the following elements: A, APPLET, FORM, 
FRAME, IFRAME, IMG, and MAP. When both attributes are used on a single 
element, their values must be identical."

http://www.w3.org/TR/html4/struct/links.html#h-12.2.3

INPUT is not in that list.

What is confusing is that there's effectively more than one NAME 
attribute in HTML 4.01:

1. NAME as unique element identifier (A, APPLET, FORM, FRAME, IFRAME, 
IMG, MAP); deprecated in favour of ID. If ID is present on the same 
element, the values must be the same. This attribute has the NAME data 
type ( http://www.w3.org/TR/html401/types.html#type-name ).

2. NAME as non-unique (!) parameter key for PARAM. This attribute has 
the CDATA data type ( http://www.w3.org/TR/html401/types.html#type-cdata ).

3. NAME as non-unique (!) key for form control submission for INPUT, 
BUTTON, SELECT, and OBJECT. This attribute has the CDATA data type.

4. NAME for a piece of metadata about the document on the META element. 
I'm not sure what it means if the NAME is repeated (e.g. if you repeat 
NAME="author" have you specified two authors?). This attribute has the 
NAME data type.

getElementsByName appears to apply to all of these:

http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-71555259

Note there is, more helpfully perhaps, a getElementsById method. Also 
note that Internet Explorer has a notorious bug where getElementsByName 
may also select elements by ID.


In the case of form controls, values of ID and NAME may differ, for example:

<fieldset>
     <legend>Favorite fruit</legend>
     <label for="apple">Apple:</label><input type="radio" id="apple" 
name="fruit">
     <label for="banana">Banana</label><input type="radio" id="banana" 
name="fruit">
     <label for="orange">Orange</label><input type="radio" id="orange" 
name="fruit">
</fieldset>

The selected value is submitted to the server with fruit as the key, 
e.g. fruit=orange. But the ID attribute uniquely identifies a particular 
option and associates it with (technically one or more, but usually one) 
LABEL element via the FOR attribute.

> so just thought deprecating name on some elements is the wrong way

Only the use of NAME instead of ID has been deprecated (1 out of 4 above).

(X)HTML doesn't need another generic means of arbitrarily grouping 
elements in a document (that's what CLASS is for) or uniquely 
identifying elements in a document (that's what ID is for). It /may/ 
need further ways to create special sets of elements, much as you have 
sets of params with the same NAME attribute and sets of form controls 
with the same NAME attribute.

Note that using classnames to group elements is in fact extremely common 
practice in everyday web publishing, e.g. for styling or for marking up 
data with microformats:

http://articles.techrepublic.com.com/5100-10878_11-5286783.html

http://microformats.org/

JavaScript libraries have plugged the gap in the W3C DOM by defining 
getElementsByClassName functions, for example:

http://developer.yahoo.com/yui/docs/YAHOO.util.Dom.html#method_getElementsByClassName

Browser implementors are beginning to add such functions to their DOM 
implementations, for example:

http://webkit.org/blog/153/webkit-gets-native-getelementsbyclassname/

The HTML5 draft proposes to standardize it:

http://www.w3.org/html/wg/html5/#getelementsbyclassname

--
Benjamin Hawkes-Lewis
Received on Tuesday, 1 July 2008 06:57:07 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Tuesday, 27 March 2012 18:16:14 GMT