2012-09-04 53 views
1

我想通过调试,我不应该命名任何表单元素name="submit",但即使搜索我没有找到任何好的解释,为什么?为什么表单元素不应该被命名为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(”测试形式)”不是一个函数

如果你只是重命名提交按钮name="submit"其他任何东西(即使你只是利用它的某些部分),或者只是删除name="submit"属性,然后提交和提交链接将工作。

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

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

我将不胜感激解释。谢谢

回答

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()方法 - 并且因为元素是,而不是函数,您会得到该错误消息。

+0

现在有道理。所以最好的做法是避免任何表单元素名称中的所有表单方法。谢谢 – cusman

+0

“最佳实践”有时很难定义,但可以肯定地说,如果你遵循这个经验法则,你不应该遇到麻烦。 –

1

提交将是表单输入类型,我认为也用作在JavaScript中的标识符。所以命名提交按钮“提交”,使得使用“提交”在JavaScript暧昧

2

假设您的表单被命名为"foo"并且您有一个字段"firstName"

foo.firstName是表单中的那个字段。

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

如果您将submit重新定义为表单域,则会覆盖submit方法。

+0

这是完全有道理的。谢谢 – cusman

相关问题