2

我有这个简单的html 标记:

<form id="form" action="lalala">
  <input type="text" id="action"/>  //a reserved property name id
  <input type="submit" id="submit"/> //same here
</form>

但是 - 运行:

alert(document.getElementById('form').action);

警报

在此处输入图像描述

而不是应该的“拉拉拉”。

好像getElementById没有直接访问's props

这是为什么 ?.....它实际上可能意味着我必须知道所有表单元素的道具(为了不向后代元素提供保留的道具ID)?

4

4 回答 4

4

这与 HTML 表单元素对象的属性无关,而是与getElementById一切有关。

保留的属性名称 id

它不是“保留的”,它只是有一个默认定义的值

如果您在表单中有一个表单控件,并且该控件的 id(或名称)与表单元素所具有的属性相匹配,那么对该表单控件的引用将覆盖该属性的正常值。

当一个表单元素被索引以进行索引属性检索时,当使用给定索引作为其参数调用时,用户代理必须返回元素集合上的 item 方法返回的值。

http://www.w3.org/TR/html5/forms.html#the-form-element

这很糟糕,但是自从有这样的事情以来,表单的 DOM 是如何工作的。

由于该特定属性映射到属性值,因此您可以使用getAttributesetAttribute操作它。(这在旧的 IE 中不起作用(它对那些操作属性的方法的实现有缺陷)并且不适用于其他一些属性(如提交方法))。

它实际上可能意味着我必须知道所有表单元素的道具(为了不向后代元素提供保留的道具 ID)

是的。

于 2013-10-16T08:09:00.647 回答
4

试试这样:

alert(document.getElementById('form').getAttribute("action"));
于 2013-10-16T08:09:04.220 回答
1

您可以通过属性访问它:

document.getElementById('form').attributes["action"].value

于 2013-10-16T08:10:12.040 回答
1

在这种情况下你不能写 .action 因为你应该访问它抛出它的属性而不是属性,这是一个属性,因此,你需要 getAttribute ,它会工作:)

alert(document.getElementById('form').getAttribute("action"));
于 2013-10-16T08:11:04.740 回答