Javascript 在document.forms[x].elements中从DOM中省略图像输入是否正常?

Javascript 在document.forms[x].elements中从DOM中省略图像输入是否正常?,javascript,html,dom,forms,input,Javascript,Html,Dom,Forms,Input,我发现在HTML页面中给定如下表单: <form name="form"> <input type="image" name="foo" src="somewhere.gif" alt="image" value="blah"/> <input type="text" name="bar" value="blah"/> </form> 在Javascript中通过DOM访问元素时,没有用于图像输入的元素!只是

我发现在HTML页面中给定如下表单:

<form name="form">
   <input type="image" name="foo" 
          src="somewhere.gif" alt="image" value="blah"/>
   <input type="text" name="bar" value="blah"/>
</form>

在Javascript中通过DOM访问元素时,没有用于图像输入的元素!只是省略了。因此,
document.forms[0]。elements.length
为1,
document.forms[0]。element[0]。type
为“text”

在Firefox和IE中似乎就是这样。我在参考书或网络上都找不到这一事实。我只能在这里找到一条一次性评论:


这意味着“就是这样”。如果是这样的话,那就这样吧——但它真的没有被记录在任何地方吗?这是一个历史错误,还是有原因?

这似乎是所有浏览器中
元素
属性的行为

但是,您仍然可以使用
childNodes
属性通过JavaScript中的DOM访问它

例如:

document.forms[0].childNodes.length; // equals 5 (2 inputs and 3 text nodes).
document.forms[0].childNodes[1];     // This is your input with type='image'
有趣的。。。规范将
.elements
定义为:

元素 返回表单中所有控件元素的集合

规范第17.2.1部分没有列出“图像”类型,所以我想这就是答案。

事实上,我看到一条评论:“DOM应该是这样工作的,这就是它在Mozilla、NS4x和IE中的工作方式。即使我们想改变,也无法改变,很多网站都会崩溃。”因此我倾向于历史错误。图像元素已在HTML 2 DTD中


也许这就是作者不鼓励使用Dom层次结构而支持getElement[s]ByXxx函数(或XPath!)的原因和其他可能的罪魁祸首。

我自己也被它咬了一口。是的。

没错,但是它没有列出
文本区域
,或者
选择
“输入”,它们确实出现在
元素
属性中。你链接到的HTML规范确实列出了图像类型(在提交和重置之间),除非我不明白你说了什么。