我通过调试发现我不应该命名任何表单元素name="submit"
,但即使在搜索之后我也找不到任何好的解释原因?
请参阅下面的简单代码示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<form action="javascript:alert('submitted');" method="post" id="test-form">
<label>Name</label>
<input type="text" name="name-field" value="" />
<input type="submit" name="submit" value="Submit Button" /> <!-- name should not be "submit" -->
<p><a href="javascript: document.getElementById('test-form').submit();">Submit Link</a></p>
</form>
</body>
</html>
如果您在提交链接上点击,则会出现错误
未处理错误:'document.getElementById('test-form')。submit'不是函数
如果你只是重命名你的提交按钮除了name="submit"
以外的其他任何内容(即使你只是将其部分资本化)或只是删除 name="submit"
属性,然后提交按钮和提交链接都可以使用。
我在最新版本的Internet Explorer,Firefox,Opera,Chrome和Safari中尝试过此操作。所有这些都与此有一致的行为。
正如您在我的代码示例中所看到的,没有jQuery或任何其他JavaScript库的参与。
我很感激解释。感谢
答案 0 :(得分:3)
如果您在此处查看Mozilla文档:https://developer.mozilla.org/en-US/docs/DOM/HTMLFormElement
您会看到表单有.submit()
方法。
此外,表单还填充了表单中的字段。
(这是一个例子: http://www.devbay.com/articles/javascript/accessing-form-elements-array-with-javascript/ 我找不到应该发生的任何引用,只是它发生了。)
因此,当你创建一个名为submit
的元素时,它会覆盖表单内置的submit()
方法 - 而且因为元素是,所以不是函数,你收到错误信息。
答案 1 :(得分:2)
假设您的表单名为"foo"
,并且您有一个字段"firstName"
。
foo.firstName
是表单中的字段。
foo.submit()
将提交该表单,因为submit
是表单上的方法。
如果您将submit
重新定义为表单字段,则会覆盖submit
方法。
答案 2 :(得分:1)
提交将是表单输入类型,我认为也用作javascript中的标识符。因此,命名提交按钮“提交”会在javascript模糊中使用“提交”