【问题标题】:In javascript is this a valid construct?: document.name.name.value?在 javascript 中,这是一个有效的构造吗?:document.name.name.value?
【发布时间】:2026-01-16 14:15:02
【问题描述】:

这是表格:

<form name=fname ...
   <input name=iname value="" ...

这个 javascript 函数通过以下方式获取输入的值:

var val = document.fname.iname.value;

这合法吗?我以为你必须用getElementsByName 来做这件事。它有效,只是我从未见过有人这样做。这是只是碰巧起作用的事情之一……现在?

【问题讨论】:

  • 是的,您可以使用 name 属性来做到这一点。
  • document.forms.fname.elements.iname.value 是更好的风格。
  • 看看herethere

标签: javascript html dom


【解决方案1】:

更新

根据 WHATWG 6.2.4 Named access on the Window object

Window 对象支持命名属性。 Window 对象窗口在任何时候支持的属性名称包括以下内容,...对于所有 appletembedformframesetimgobject 元素...


根据 W3C DOM 2 HTML 规范2.7.2.1 HTMLAllCollection

以下元素的名称属性可以作为文档对象的属性引用: anchorappletbuttonformframeiframeimginputmapmetaobjectparamselecttextarea


这种引用方法是标准的,但通常不鼓励使用。避免通过name 属性直接引用 DOM 属性或窗口对象的几个原因是:变量阴影、无意中将范围限定为窗口对象、主要的浏览器不一致等。有关应避免的详细信息,请阅读 this section 和 @ 987654324@.

此片段展示了一种使用表单名称作为引用 document.forms 以及前面提到的引用表单名称的稳定且标准的方式。

片段

var val1 = document.forms.fname.elements.iname.value;

console.log(val1);

var val2 = fname.iname.value;

console.log(val2);
<form name='fname'>
   <input name='iname' value="42">
</form>

【讨论】:

  • 他们询问的不是document forms 集合,而是直接在document 对象上按名称访问表单。
  • 这个片段展示了使用表单名称作为参考和前面提到的参考的更好方法。
  • 你确定这是非标准的吗?
  • @squint - 你说得很对。这是完全标准的。它在 HTML5 规范的3.1.3 DOM tree accessors 部分进行了描述。向下滚动到“文档接口支持命名属性”开头的部分。
  • @squint 也找到了规格,并进行了相应更新。这是标准的,虽然一团糟。
最近更新 更多