2012-09-04 84 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

相關問題