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

Javascript 为什么表单元素不应命名为submit?,javascript,Javascript,通过调试,我发现我不应该命名任何表单元素name=“submit”,但即使在搜索之后,我也没有找到任何关于原因的好解释 请参见下面的简单代码示例: <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <title></title> </head> <body>

通过调试,我发现我不应该命名任何表单元素
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库都没有涉及


我将感谢你的解释。谢谢

提交将是表单输入类型,我认为在javascript中也用作标识符。因此,如果您在此处查看Mozilla文档,将提交按钮命名为“提交”会使javascript中的“提交”变得模棱两可:

您将看到表单有一个
.submit()
方法

此外,表单中的字段也会填充表单

(以下是一个例子: 我找不到它应该发生的任何参考资料,只是它确实发生了。)


因此,当您创建一个名为
submit
的元素时,它会覆盖表单内置的
submit()
方法——因为元素不是函数,所以您会收到错误消息。

假设您的表单名为
“foo”
,并且您有一个字段
“firstName”

foo.firstName
是表单中的字段

foo.submit()
将提交该表单,因为
submit
是表单上的一种方法


如果将
submit
重新定义为表单字段,则覆盖
submit
方法。

现在就有意义了。所以最佳实践是避免在任何表单元素名称中使用所有表单方法。谢天谢地,“最佳实践”有时很难定义,但可以肯定地说,如果你遵循这条经验法则,你就不应该遇到麻烦。这完全有道理。谢谢