javascript - 通过提交事件提交表单,其中包含名为 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"
?
解决方案
根据MDN:
命名输入作为属性添加到它们的所有者表单实例中,并且如果它们共享相同的名称,则可以覆盖本机属性(例如,具有输入命名动作的表单将使其动作属性返回该输入而不是表单的动作 HTML 属性)。
因此,当您将按钮命名为 时submit
,您会用按钮的 DOM 对象覆盖submit
表单的本机功能。这样,您的调用form.submit()
最终将等同于form.elements.submit.submit()
,form.elements.submit.submit
实际上失败了undefined
。
推荐阅读
- python - Python Web Scraper:我的脚本只是打印第一个,而不是全部?
- html - 标题标签内有多个 div
- python - 无法理解python中一行代码中的AND运算符
- javascript - 如何根据文本内容选择复选框?
- python - Django:它如何找到用户模型?
- c++ - C++11 右值引用与 const 引用
- php - guzzle 未定义函数 getStatusCode()
- ruamel.yaml - 使用 ruamel.yaml 打印出单个元素单引号的列表?
- dynamic - 将 iCheck 插件与动态单选按钮和淘汰赛 js 集成
- ms-access - 访问:按来自不同来源的日期排序