2015-10-28 29 views
0

我有以下腳本,它只是我的實際代碼例子來提交,但它的行爲相同,實際的一個:表不能使用jQuery

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Document</title> 
</head> 
<body> 
    <form action="http://google.com/"> 
     <input type="text" name="item_name" /> 
     <input type="hidden" name="submit" value="save" /> 
     <a href="" id="save">Submit</a> 
    </form> 
    <script src="https://code.jquery.com/jquery-1.11.3.min.js"></script> 
    <script> 
     jQuery(function($){ 
      $('#save').on('click', function(e){ 
       e.preventDefault(); 

       $('form').submit(); 
      }); 
     }); 
    </script> 
</body> 
</html> 

你可以看到,有a標籤與id保存,這是當這個鏈接被點擊時,表單應提交,但它沒有。這是由於名稱爲submit的隱藏輸入引起的,如果我更改了名稱,它的效果很好。

在linux上的chrome和firefox上都試過這個。任何人都可以解釋這個

這裏是fiddle

- 編輯 -

我使用本機的單擊事件的嘗試:

document.getElementById('save').onclick = function(e){ 
    e.preventDefault(); 
    document.getElementsByTagName('form')[0].submit(); 
} 

形式不能太submited。

+0

@Pekka如果我刪除該行,該鏈接將作爲通常的鏈接。表單不是submited –

+0

@。@ nah,這實際上是一個複雜的情況...我使用內聯編輯,這就是爲什麼我使用錨標記 –

+0

有人已經問過這個:http://stackoverflow.com/questions/8729319/how-send -a-form-with-javascript-when-input-name-is-submit - 基本上document.getElementById('redirectForm')。submit指向一個DOM元素,而不是一個函數,如果有一個元素的name = submit – Carlo

回答

2

我認爲這是同一個問題,因爲這: TypeError: e[h] is not a function

有一個名爲輸入提交增加了一個「提交」財產的形式,這意味着你不能調用.submit()的函數。

你應該爲你的隱藏輸入命名。

+0

真棒,感謝您的解釋。 –

0

您的HTML應該看起來像這樣。

<form action="index.php"> 
    <input type="text" name="item_name" /> 
    <a href="#" id="save">Submit</a> 
</form> 

您可以通過使用觸發修復它( '提交')

jQuery(function($){ 
     $('#save').on('click', function(e){ 
      e.preventDefault(); 
      $('form').trigger('submit'); 

}); 

JsFiddle

0

這是jQuery的命名不明確的問題。您在調用衝突重複引用時不應聲明任何 表單元素名稱ID submit

當用戶嘗試提交表單時,提交事件將發送到元素。它只能附加到<form>元素。可以通過單擊明確的<input type="submit">,<input type="image"><button type="submit">或通過在某些表單元素具有焦點時按Enter鍵來提交表單。

取決於瀏覽器,回車鍵可能只會造成一種形式 如果提交的形式都只有一個文本字段,或者只有當有 是目前提交按鈕。接口不應該依賴此密鑰的特定行爲,除非問題被 強制遵守按下Enter鍵的按鍵事件。

  • 作爲。提交()方法只.on("submit", handler)的簡寫,剝離可能使用.off("submit")

  • 形式及其子元素不應該使用輸入名稱或ID與諸如submitlength,或method形式的性質,發生衝突。 名稱衝突可能導致混淆失敗。

0

您需要將輸入按鈕的名稱從「submit」更改爲其他名稱。有一個名爲「submit」的元素會導致表單的提交方法不再起作用,這意味着表單不能通過JavaScript提交(至少不容易)。

原因是因爲一個名爲「submit」的輸入元素可以通過它的名字來引用:form1.submit。也就是說,input元素被添加爲表單對象的屬性,屬性名稱是輸入元素的名稱。這基本上隱藏了表單原型上的提交函數。

+0

事實上,我將字段名稱更改爲其他名稱,然後在php文件中進行調整。 –