5

以前、この SOで、属性が定義されているが属性が定義されていないdocument.getElementById要素を見つけることができるIE6/7 (および Opera の一部のバージョン) の奇妙な動作について言及しました。nameid

function f() {
    document.getElementById("a1").value = ...;
}
...
<input name="a1" ...></input>

これらのバージョンで実際に動作します。

ネットを検索すると、 Chris Bloom によるこのバグ レポートが見つかりました。Milo van der Leij という名前のユーザーが次のことを指摘しています (この w3c 仕様で彼が言及しているように)。

彼らの弁護では、「id 属性と name 属性は同じ名前空間を共有しています。」

id 属性と name 属性が同じ名前空間を共有しているとはどういう意味ですか? IE6/7/Opera がこの動作を JS エンジンに実装するのに、この条件で十分なのはなぜですか?

4

1 に答える 1

4

この用語"same namespace"は、名前と ID が完全に分離されていないことを意味します。同じnameを1 つの特定のオブジェクトで使用できますが、1 つのオブジェクトと別のオブジェクトで をid使用することはできません。それは対立を生み出します。name="foo"id="foo"

それは、それらのブラウザーが物事を実装することを決定した方法です。dom 要素を含む id を持つ各要素のグローバル変数もあります。それが彼らが物事を実装した方法です。これは標準ではなく、最新のブラウザーで行われている方法ではありません (一部の下位互換性を除く)。

取得する DOM 要素の値を使用idします。name投稿されたフォームでサーバー識別に値を使用します。

idあるオブジェクトで を使用し、別のオブジェクトで同じを使用しない場合、コードで名前と ID の間に競合が発生することはありませんname。通常、特定の要素に同じnameとを指定しても問題はありませんid

于 2012-11-09T01:15:37.440 に答える