我有一个标记为
的表单<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()?
的习惯答案 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]);