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

bug*_*net 8 javascript forms

我有一个标记为的表格

<form class="form1" method="post" action="form1.php" style="width:405px">
Run Code Online (Sandbox Code Playgroud)

通常,我可以通过参考.action表单对象来访问javascript中表单的操作

document.forms[0].action
Run Code Online (Sandbox Code Playgroud)

这将返回值

form1.php
Run Code Online (Sandbox Code Playgroud)

但是,如果作为表单的一个组件,我有一个名为"action"的项,则此"action"将成为表单操作的内容.也就是说,如果表单标记包含,例如,

<input name="action" type="hidden" value="check" />
Run Code Online (Sandbox Code Playgroud)

然后

document.forms[0].action
Run Code Online (Sandbox Code Playgroud)

返回值

<input name="action" type="hidden" value="check" />
Run Code Online (Sandbox Code Playgroud)

现在,我确实研究了如何解决这个问题:使用

document.forms[0].getAttribute("action")
Run Code Online (Sandbox Code Playgroud)

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

Wut*_*utz 5

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

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

  • 使用 `getAttribute` 时的一个区别是,与 `action` 属性不同,它可以返回相对 url。 (2认同)