【发布时间】: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="" 属性和它显示的图像)。
HTMLFormElement.elements 属性返回一个 HTMLFormControlsCollection (HTML 4 HTMLCollection) 的所有表单 FORM 元素中包含的控件,输入除外 具有 image 类型属性的元素。
WHATWG 说:
elements IDL 属性必须返回一个 HTMLFormControlsCollection 植根于表单元素,其过滤器匹配列出的元素,其 表单所有者是表单元素,输入元素除外 其 type 属性处于 Image Button 状态,对于 历史原因,被排除在这个特定的集合之外。
图像按钮状态代表用户来自的图像 可以选择一个坐标并提交表单,或者一个按钮 用户可以从中提交表单。该元素是一个按钮, 特别是提交按钮。
【问题讨论】:
-
也许你应该按照the specifications提供的链接(比MDN更权威):“...除了type属性处于图像按钮状态的输入元素,它由于历史原因,必须从该特定集合中排除。"
-
html.spec.whatwg.org/multipage/forms.html#dom-form-elements 说这是“出于历史原因”。如果没有进一步的解释,这可能意味着他们没有充分的理由,但是当他们不保持向后兼容时会出现问题。
-
@Berg——更早的DOM 2 spec(2003)没有这个限制,所以历史很长。这是说明浏览器做什么而不是他们应该做什么的“生活规范”的一个例子吗?
-
@RobG 是的,所有浏览器都暴露相同的错误似乎比修复错误更重要。跨浏览器兼容性高于一切!
-
@AnthonyRutledge “纯粹的 JavaScript 爱好者”必须意识到这些机制仍然像 20 年前一样工作。您不仅是爱好者,还是考古学家。