【问题标题】:JavaScript: Why don't <input type="image"> elements appear in document.forms.elements?JavaScript:为什么 <input type="image"> 元素没有出现在 document.forms.elements 中?
【发布时间】:2017-05-28 07:45:33
【问题描述】:

前几天我在Mozilla Developer Network 上读到document.forms[x].element 集合将不包含type="image" 的输入元素。为什么不?我在 Firefox 50.1.0 上检查了这一点,果然,我在 document.forms.elements 中找不到 input type="image"。

我没有被卡住或任何东西。我只是想知道为什么会这样(除了存在 src="" 属性和它显示的图像)。

Mozilla Developer Network 状态:

HTMLFormElement.elements 属性返回一个 HTMLFormControlsCollection (HTML 4 HTMLCollection) 的所有表单 FORM 元素中包含的控件,输入除外 具有 image 类型属性的元素。

WHATWG 说:

elements IDL 属性必须返回一个 HTMLFormControlsCollection 植根于表单元素,其过滤器匹配列出的元素,其 表单所有者是表单元素,输入元素除外 其 type 属性处于 Image Button 状态,对于 历史原因,被排除在这个特定的集合之外。

World Wide Web Consortium 说:

图像按钮状态代表用户来自的图像 可以选择一个坐标并提交表单,或者一个按钮 用户可以从中提交表单。该元素是一个按钮, 特别是提交按钮。

【问题讨论】:

  • 也许你应该按照the specifications提供的链接(比MDN更权威):“...除了type属性处于图像按钮状态的输入元素,它由于历史原因,必须从该特定集合中排除。"
  • html.spec.whatwg.org/multipage/forms.html#dom-form-elements 说这是“出于历史原因”。如果没有进一步的解释,这可能意味着他们没有充分的理由,但是当他们不保持向后兼容时会出现问题。
  • @Berg——更早的DOM 2 spec(2003)没有这个限制,所以历史很长。这是说明浏览器做什么而不是他们应该做什么的“生活规范”的一个例子吗?
  • @RobG 是的,所有浏览器都暴露相同的错误似乎比修复错误更重要。跨浏览器兼容性高于一切!
  • @AnthonyRutledge “纯粹的 JavaScript 爱好者”必须意识到这些机制仍然像 20 年前一样工作。您不仅是爱好者,还是考古学家。

标签: javascript collections


【解决方案1】:

我检查了有关此事的许多资源,并特别找到了这个可以追溯到 1999 年 7 月 15 日的网站:

http://www.alanflavell.org.uk/www/trysub.html

type=image 的输入元素专门用作图像映射,并包含其他 HTMLFormElement 无法或无法提供的属性和功能。我记得它被用于地图和其他图形,用户将在地图上选择特定位置,坐标被传输回服务器及其 cgi 应用程序,然后根据单击的坐标提供内容。在我看来,它是现代浏览器中为数不多的古老遗迹之一,可以被视为僵尸功能。

在 Mozilla 的 Bugzilla 中也可能发现报告此元素的异常行为的问题,这些行为既不符合图像也不符合输入元素:

https://bugzilla.mozilla.org/show_bug.cgi?id=110595

我无法快速找到 1998 年以来的 Netscape Navigator 源代码,也不认为其中会有任何有用的 cmets。我非常确定做出这个决定是因为 IMAGE-input 元素是如此的怪异、奇怪和与其他元素不同,以至于不值得规范、设计和开发努力来改变它在任何方向上的行为。在 JavaScript 核心和 DOM 中将其实现为 FORM 元素是不值得的。

我所发现的一切都导致了这个结论,但要获得充分的证据,我们需要找到做出决定的人,并且是第一个实现导致这个规范决定的人。从历史的角度来看,这当然是令人兴奋的。

【讨论】:

  • 总之,输入 type="image" 的初衷并不是简单地创建一个装饰提交按钮,因此在早期的 HTML 规范中没有必要强制使用 value 属性.因此,如果没有强制值属性,并且重点是坐标和图像映射,则确定type="image" 输入按钮更像图像(等等......),然后是其他真正的标量输入类型。没有强制值属性,document.forms[x].elements 中没有强制存在。
  • 感谢您的真诚努力。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-27
  • 2011-11-15
  • 1970-01-01
  • 2021-10-19
  • 2013-05-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多