名为“action”的表单中的输入会覆盖表单的action属性。这是一个错误吗?

时间:2013-08-07 10:12:05

标签: javascript html-form

我有一个标记为

的表单
<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()?

的习惯

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

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

这很hacky,但是您可以使用以下命令直接访问并调用action getter。

Object.getOwnPropertyDescriptor(HTMLFormElement.prototype, 'action').get.call(document.forms[0]);