大多数表单JavaScript使用ID而不是NAME的原因

5

有人可以介绍一下为什么使用NAME与表单元素交互已经不再实践,并且document.getElementById已经取代了它的历史/原因吗?

到底发生了什么历史事件促使这种变化和转变呢?

最后,是否存在转变或两者仍然是推荐的操作方式?

Document.getElementById vs  document.form.name

根据一些论坛讨论,document.form.name在某些浏览器中无法识别。这是否属实?参见:

"I've been told in the past that you should not use "document.form_name.element_name" compared to "document.getElementById()", as the first is not recognized by all browsers. "
这个论坛中的一个讨论讨论了在JavaScript中使用document.getElementById()和document.formName.element的差异。使用document.getElementById()是更好的选择,因为它可以更直接地找到所需的元素,并且比document.formName.element更快和更安全,特别是在有多个表单时。

实际问题是什么?“您应该只根据您面临的实际问题提出实用、可回答的问题。” http://stackoverflow.com/faq - Jukka K. Korpela
问题在于两种方式都可以工作,但知道哪种方式更正确在编写代码时会更好。 - Menelaos
以一种建设性的问题“哪个是更正确的”来解释,这是一个重复问题(至少一个旧问题的重复)。 - Jukka K. Korpela
2个回答

3

属性NAME不一定是唯一的。例如,单选按钮通过具有相同名称来分组。调用getElementByName将返回集合中的所有按钮。ID应该是唯一的。因此,回答您的问题,它们各自有其用处。


这个确实有道理。你知道关于通过名称访问而不在HTML DOM规范中的内容吗?因此使用它的代码不能被描述为符合标准。我刚刚发现了http://jibbering.com/faq/notes/form-access/#faShrt,其中概述了这一点,尽管我不知道该文档是何时编写的以及今天是否仍然有效。当然,除非我没有正确阅读该声明。 - Menelaos

1

name在访问document.forms[name].element[name]时是普遍可接受的。它被IE 5.5、Firefox 0.8、Opera 5、Navigator 4等支持。由于jQuery的简单性使人们忘记了它,所以已经过时。

但是,如果一个input元素与form对象上的属性同名,则访问它可能无法正常工作,例如:

<form name="hi" action="/go"><input name="action" value="world">

document.hi.action应该返回"/go"还是"[Input value=world]"?


看起来你可以通过具体使用.attributes来完全消除歧义,例如document.forms["hi"].attributes["action"].value和.elements document.forms["hi"].elements["action"],两者都符合W3C标准。 - JayC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接