具有名称为“”的子输入的表单的Grab id;id”;

Grab id of a form that has a child input with a name="id"

本文关键字:id 表单 Grab 输入 有名称      更新时间:2023-09-26

所以我遇到了一个奇怪的问题。。。我想获取一个表单的id,比如:

<form id="test">
    <input name="id" type="hidden" value/>
</form>

但运行document.getElementById("test").id并没有像预期的那样返回test,而是返回带有name="id"的输入。有人知道这里发生了什么吗?

这是一把小提琴再现了这个问题->http://jsfiddle.net/jascbbfu/

Form控件名称用于创建引用控件的窗体的命名属性。所以你有:

<form id="test">
  <input name="id">
</form>

则表单的id属性被分配给名为id=的输入元素的引用。表单控件的名称不应与标准表单属性相同,例如:

<form>
  <input name="submit">
</form>

无法调用表单的submit方法,因为form.submit引用的是输入,而不是方法。

如其他答案中所述,您可以将名称更改为与标准表单属性不冲突的名称,也可以使用getAttribute。首选第一种解决方案,因为它还可能为表单控件提供更合适的名称,并避免使用getAttribute

这里发生的是HTML刚刚正式化时的一个旧工件。它应该只位于命名集合下,但浏览器决定在各种随机位置创建快捷方式访问。无论哪种方式,您都可以在此处阅读更多信息:http://jibbering.com/faq/notes/form-access/一旦我在我的桌面上,我会引用相关的部分。

这是因为这里有一行:

<form id="test">
    <input name="id" type="hidden"/>   <!-- HERE -->
</form>

当你说:时,浏览器认为你指的是名称为"id"的元素

document.getElementById("test").id // Gets input with the name of "id"

这将是<input>元素。将其更改为id以外的其他名称,它就会起作用。

JS似乎正在考虑将id作为您正在考虑的较大窗体的子对象。您正在寻找函数getAttribute,它在JSfiddle:中工作

alert(document.getElementById("test").getAttribute("id"));
alert(document.getElementById("test2").getAttribute("id"));

http://jsfiddle.net/jascbbfu/3/

希望能有所帮助!