【问题标题】:Form elements as properties of the form表单元素作为表单的属性
【发布时间】:2023-03-29 05:59:02
【问题描述】:

如果您在表单中有一个表单元素并且该元素具有nameid,您可以直接从表单的DOM 元素中访问它作为具有该名称的属性。这种行为似乎得到了非常广泛的支持。它是否被任何规范所涵盖,如果是,是哪一个?

DOM2 HTML 规范中表单的elements 集合is specified 的这种行为,但我没有立即看到将元素作为属性转储到任何地方指定的表单本身的业务,除非短语 "它提供了对包含的表单控件以及表单元素的属性的直接访问。” here 的意思是说(如果是这样,哇是那么微妙,我读它时指的是 @987654329 @ 收藏)。我猜这只是遗留行为。

为了清楚起见:我不是在问访问表单字段的最佳方式是什么,我是在问这种行为是否包含在标准中。 (我还避免将所有事情都倾倒在 window 对象上;这是另一个话题。)

示例 (live copy):

HTML:

<form id="theForm">
<input type="text" name="field1" value="foo">
<input type="text" id="field2" value="bar">
</form>

JavaScript:

var f = document.getElementById("theForm");
console.log(f.elements.field1.value); // "foo", per spec
console.log(f.field1.value);          // also "foo"
console.log(f.elements.field2.value); // "bar", per spec
console.log(f.field2.value);          // also "bar"

我检查了 IE6、7、8 和 9、Firefox 4.0、Firefox 3.6、Chrome 12、Opera 11 和 Safari 5。他们都这样做了(使表单字段在两个地方都可用)。

【问题讨论】:

  • 我很确定这是对原本是 IE 非标准行为的东西的剩余向后支持
  • @Gareth:谢谢,我想我记得它是从 Netscape Navigator 2 开始的,所以这可能不是微软的错,但可能是 Netscape 从 IE1 复制过来的——有很多来回在第一次浏览器战争的那些令人兴奋的岁月里。 :-) 无论如何,它是in the process of being recognised in a standard

标签: javascript dom


【解决方案1】:

找到它in the draft HTML5 specification:

form 元素为索引属性检索编制索引时,用户代理必须返回elements 集合上的item 方法返回的值,当使用给定索引调用时作为它的论据。

每个form 元素都有一个名称到元素的映射,称为过去的名称映射。它用于保持控件的名称,即使它们更改名称。

支持的属性名称是elements 属性返回的对象当前支持的名称与过去名称映射中当前的名称的并集。

form 元素为命名属性检索编制索引时,用户代理必须运行以下步骤:

  1. 如果 nameelements 属性返回的对象的受支持属性名称之一,则运行以下子步骤:

    1. candidatenamedItem() 方法返回的对象,该对象在传递 name 参数时由 elements 属性返回的对象。

    2. 如果 candidate 是一个元素,则在 form 元素的过去名称映射中添加从 namecandidate 的映射,替换以前的同名条目,如果有的话。

    3. 返回候选人并中止这些步骤。

  2. 否则,nameform 元素的过去名称映射中的条目之一的名称:返回与该映射中的 name 关联的对象。

如果 form 元素的过去名称映射中列出的元素从 Document 中删除,则必须从映射中删除其条目。

...我们从 ECMAScript 语言映射上的 DOM2 HTML specification's section 得知,通过 [] 进行索引最终会调用 item(对于数字)或 namedItem(对于字符串)。

感谢@Carey 提供的his answer to my other related question,这让我面无表情并查看了 HTML5 草案,因为他们正试图将 HTML DOM 内容纳入规范。

【讨论】:

    【解决方案2】:

    【讨论】:

    • 这也是一份非常古老的文档副本,已被mozdev 取代。还值得指出的是,相关文档在有关 elements 属性的部分中隐藏了几段(即使它们实际上与该属性没有任何关系,除了复制它)。
    • 谢谢,但我正在寻找标准机构的规范。
    • 据我所知Netscape“发明”了Javascript,所以链接文档是一种标准。由于 AOL 关闭了 netscape-devedge,因此不再存在官方资源。但是,只要 Javascript 从未成为“官方标准”,您就不会找到官方标准(派生的 ECMAScript 不包含我们在此讨论的具体信息)。
    • Netscape 确实发明了 JavaScript,特别是在 Brendan Eich 任职时。但是本周拥有 Netscape 的人并没有定义 DOM 或它的语言绑定,并且在 标准 方面,Netscape 和 Mozilla 现在不得不退居到 ECMA(用于 JavaScript)和W3C(用于 DOM 和 HTML),当然 Mozilla 的人是与这两项工作相关的工作组的关键成员。
    【解决方案3】:

    来自DOM 2(我的重点):

    FORM 元素包含类似于集合和元素的行为。它提供对包含的表单控件的直接访问以及表单元素的属性。

    它的措辞有点模糊,但这涵盖了您所看到的行为。

    【讨论】:

    • 是的,我在我的问题中也引用了这一点。这对于规范来说是非常微妙的,如果它真的是为了指定这种行为。不过,这可能是答案。我想我可以写信给 W3C。
    猜你喜欢
    • 1970-01-01
    • 2017-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多