2014-11-04 192 views
8

我有一個提交按鈕。點擊一個()函數的形式:jQuery的點擊()在提交按鈕

$("#submitId").click(function() { 
    $('#hiddenInput').val(someVariable); 
}); 

它的工作原理就像一個魅力。點擊提交按鈕後,click()函數將填充隱藏的輸入變量,然後提交整個表單。服務器接收到刷新內容的隱藏輸入。

我的問題是:它會一直工作嗎?是否有任何危險,由於某種原因我還不知道,提交操作首先執行,稍後再執行click()函數?我想確保隱藏的輸入總是被刷新。

+0

$(「form」)。submit();將繞過這一點,用戶可以從他們的控制檯或網址執行呼叫。 – 2014-11-04 23:26:19

+0

我想在按ENTER鍵提交表單時它也可能被繞過?試一試。 – 2014-11-04 23:28:52

+2

@JamesBlond - 回車仍然會導致點擊處理程序執行。 – 2014-11-04 23:29:22

回答

4

這將是最好的值更新直接連接到表單的提交處理這樣

$("#submitId").closest("form").submit(function() { 
$('#hiddenInput').val(someVariable); 
}); 
+0

這就是它。提交事件可以以各種方式觸發。與其試圖猜測用戶如何觸發提交事件(單擊?按鍵?),只需將您的處理程序直接附加到表單的提交。 – 2014-11-04 23:35:53

+0

如果提交按鈕嵌入到表單中的某個元素中,這將不起作用。我會使用'.closest('form')'而不是'.parent('form')'。 – PeterKA 2014-11-04 23:41:27

+0

@PeterKA - 是的,這是一個很好的觀點。將「父」編輯爲「最接近」。 – 2014-11-04 23:53:43

0

的。點擊()應該總是首先運行。

+0

更多評論而非答案。至少提供一些來源支持。 – 2017-12-22 15:55:53

19

當使用表單,它總是建議讓submit按鈕做的工作:觸發表單提交事件 ...這就是它的意思了。然後,您將聽到上的submit事件,而不是submit按鈕上的click事件。

您可以使用event.preventDefault()來防止默認提交表格,以便您可以做一些管家然後您可以提交表格。

$("#submitId").closest('form').on('submit', function(event) { 
    event.preventDefault(); 
    $('#hiddenInput').val(someVariable); //perform some operations 
    this.submit(); //now submit the form 
}); 

或者乾脆,

$('form').on('submit', function(event) { 
    event.preventDefault(); 
    $('#hiddenInput').val(someVariable); //perform some operations 
    this.submit(); //now submit the form 
}); 
+0

如果您的提交按鈕使用「formaction」,這不起作用。 我建議使用'click'事件觸發提交按鈕,或者將'formaction'的值賦給表單的'action'屬性,然後觸發'submit'事件。 – KevinAdu 2017-09-04 09:40:12

+0

@kevinAdu你是什麼意思?你有演示來說明你的擔憂嗎?謝謝。 – PeterKA 2017-09-04 13:58:27

2

我個人認爲是比較安全的,以防止提交,需要輸入然後設置值,然後才提交表單編程。如:

$("form").submit(function (e) { 
    e.preventDefault(); 
    $('#hiddenInput').val(someVariable); 
    $(this).submit(); 
});