添加 name 属性会导致 ID 值成为 IE 和 Opera 中文档对象的属性吗?

Šim*_*das 5 html javascript opera internet-explorer dom

考虑这个 HTML 源代码:

<form id="foo1" name="x"> Form 1 </form>
<form id="foo2"> Form 2 </form>
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我们定义了两个 FORM 元素。

在 Chrome、Safari 和 Firefox 中, 和document.foo1document.foo2返回undefined.

然而,在 IE 和 Opera 中,document.foo1返回对相应 FORM 元素的引用,而document.foo2返回undefined.

现场演示: http: //jsfiddle.net/zrmEm/2/

因此,第一个表单在文档对象中确实有其 ID 命名的属性,而第二个表单则没有。name而这种差异是在第一个表单中添加属性的结果。

现在,其中的逻辑在哪里?这是已知行为吗?

Rob*_*obG 1

在所有浏览器中,表单的name属性的值都作为 document 对象的属性添加,并且还作为document.forms 集合的属性添加。

如果您使用 ids,则这些值仅作为表单集合的属性添加。

IE 总是对 name 和 id 属性感到困惑。在 IE(测试版本 8)中,仅当该表单也有名称时(可能与 id 相同或不同),id 才会添加为文档的属性。

所以如果你总是使用document.forms['name-or-id']那么生活就会很甜蜜。只要您的表单名称不与其他具有 id 的表单相同,那么所有的赌注都会被取消。