HTMLのidとname

 HTMLのフォーム部品の id と name 属性についてメモ。Webデザイナーの人でも、意識してコードを書いている人は少ないと思う。 JavaScript でフォーム内の要素オブジェクトを取得するときに、 [js]getElementById('部品ID')[/js] というメソッドが使えるが、例えば、HTMLに置けるテキストボックス [html][/html] というのがあった場合、そのテキストボックスに入力された値を得たい場合 [js]getElementById('user_name').value[/js] と書く。 W3C HTML 4.01 Specification を参照すると

7.5.2 Element identifiers: the id and class attributes
Attribute definitions
id = name [CS]
    This attribute assigns a name to an element. This name must be unique in a document.

とid 属性は名前の通り、ドキュメント内で一意のもので無ければならない、とある。 HTMLは多少間違いがあっても、(というか、仕様に沿った100点満点のコードを書くことはかなり面倒)ブラウザが勝手に解釈してくれて、表示してしまうので、Webアプリケーションを作るときに思わぬ誤作動を引き起こしてしまうかもしれない。 Internet Explorer は(ver.6.xしか試してないけど)id 属性を明記しなくても getElementById を id の代わりに name で値をとってくれるのだが、Firefoxではだめだった。私はこれではまってました。 getElementByName メソッドもあるけど、以下を参照すると

name = cdata [CI]
    This attribute names the element so that it may be referred to from style sheets or scripts.
Note. This attribute has been included for backwards compatibility.
Applications should use the id attribute to identify elements.

アプリケーションは識別のために name ではなくて id を使わなければならない、って書いている。