首页 > 解决方案 > 通过提交事件提交表单,其中包含名为 submit 的隐藏字段

问题描述

我有一个 html 表单,其中包含一个隐藏的输入元素,该元素具有name="submit"

<form method="post" action="url.php">
 <input type="text" name="sometext" />
 <input type="hidden" name="submit" value="go" />
</form>

我正在使用此代码提交表单:

$("#link").click(function() {
 $("form").get(0).submit();
});

当我将输入名称更改name="submit"为提交表单以外的任何其他名称时:

<form method="post" action="url.php">
 <input type="text" name="sometext" />
 <input type="hidden" name="othername" value="go" />
</form>
<button id="link">Click</button>
<script>
$("#link").click(function() {
 $("form").get(0).submit();
});
</script>

问题是当隐藏输入有时为什么不提交表单name="submit"

标签: javascripthtmlweb

解决方案


根据MDN

命名输入作为属性添加到它们的所有者表单实例中,并且如果它们共享相同的名称,则可以覆盖本机属性(例如,具有输入命名动作的表单将使其动作属性返回该输入而不是表单的动作 HTML 属性)。

因此,当您将按钮命名为 时submit,您会用按钮的 DOM 对象覆盖submit表单的本机功能。这样,您的调用form.submit()最终将等同于form.elements.submit.submit()form.elements.submit.submit实际上失败了undefined


推荐阅读