You see a fair bit of confusion from newbies in mailing lists around the "name" attribute vs. the "id" attribute. (Edit 21 March 2010: Confusion not helped by a bug in Internet Explorer; more here.) For instance, I recently saw a "how do I do this" -style post asking how to deal with a form, with the sample being:
<form name='form1'>
<label><input type='checkbox' id='cb1'> Checkbox 1</label>
</form>
The poster wanted to know how to retrieve the form and submit it (along with some further information) via Prototype's Ajax.Updater
. So he wanted to use the serialize()
method Prototype adds to form elements when it extends them (e.g., when you retrieve the element using $()
).Consequently, the use of "id" and "name" attributes in his example was exactly backward: He wanted to be able to retrieve the form using
$()
, which is a general-purpose routine that retrieves elements by their unique ID, and then have the form fields submitted -- but the form field had no name.Here's the mantra:
Elements have IDs; form fields have names.IDs are unique in the document; form field names are not (necessarily).
Two further notes:
1. Form fields can also have IDs if you need to refer to their elements in your code (to enable/disable them, etc.), but in terms of sending in a form, fields have names.
2. You don't have to use an ID to get at the element for a form; you can use a name and then get at the form element via
document.YourFormName
in your JavaScript code. But nowadays we mostly look elements up by their unique IDs; and in the specific case of the question from the poster above, since he was going to want to use $()
, he would want an ID.
No comments:
Post a Comment