11

我有一个标记为

<form class="form1" method="post" action="form1.php" style="width:405px">

通常,我可以通过引用.action表单对象的来访问 javascript 中表单的操作,例如

document.forms[0].action

这将返回值

form1.php

但是,如果我作为表单的一个组件有一个名为“action”的项目,那么这个“action”将成为表单操作的内容。也就是说,如果表单标记包含,例如,

<input name="action" type="hidden" value="check" />

然后

document.forms[0].action

返回值

<input name="action" type="hidden" value="check" />

现在,我确实想出了如何解决这个问题:通过使用

document.forms[0].getAttribute("action")

然而,这是一个令人讨厌的问题,让我困惑了太久。这是一个错误吗?DOM 管理的一个已知问题?还是我应该养成使用 .getAttribute() 的习惯?

4

2 回答 2

5

我不会称这是一个错误。之所以会出现这种效果,是因为可以通过使用来读取属性,element.attributename并且可以以相同的方式访问表单内的命名输入,formelement.inputname. 如果存在同名的属性和输入,则无法保证会使用哪一个。它可能在不同的浏览器中表现不同。

getAttribute如果我正在读取包含在标记中或setAttribute在 JavaScript 中添加的已知属性,我个人会使用它。对于动态值,例如checked复选框的属性,我不使用getAttribute. 但这更多是个人喜好的问题,我猜。

于 2013-08-07T10:28:46.540 回答
2

我现在也在与这种行为作斗争(7年后!)

它非常hacky,但是您可以action使用以下内容直接访问和调用getter。

Object.getOwnPropertyDescriptor(HTMLFormElement.prototype, 'action').get.call(document.forms[0]);
于 2020-11-29T23:00:58.780 回答