为什么不应将表单元素命名为submit?

时间:2012-09-04 22:20:48

标签: javascript

我通过调试发现我不应该命名任何表单元素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>
  • 如果您在任何表单元素上按Enter 单击 提交按钮,它将起作用。
  • 如果您在提交链接点击,则会出现错误

    未处理错误:'document.getElementById('test-form')。submit'不是函数

如果你只是重命名你的提交按钮除了name="submit"以外的其他任何内容(即使你只是将其部分资本化)或只是删除 name="submit"属性,然后提交按钮提交链接都可以使用。

我在最新版本的Internet Explorer,Firefox,Opera,Chrome和Safari中尝试过此操作。所有这些都与此有一致的行为。

正如您在我的代码示例中所看到的,没有jQuery或任何其他JavaScript库的参与。

我很感激解释。感谢

3 个答案:

答案 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模糊中使用“提交”