我有一個表單,提交時,我需要做一些額外的處理之前,它應該提交表單。我可以防止默認的表單提交行爲,然後做我的額外處理(它基本上調用Google Maps API並向窗體添加一些隱藏字段) - 然後我需要提交表單。jQuery - 防止默認,然後繼續默認
有沒有辦法「防止默認」,然後稍後再點「繼續默認?」
我有一個表單,提交時,我需要做一些額外的處理之前,它應該提交表單。我可以防止默認的表單提交行爲,然後做我的額外處理(它基本上調用Google Maps API並向窗體添加一些隱藏字段) - 然後我需要提交表單。jQuery - 防止默認,然後繼續默認
有沒有辦法「防止默認」,然後稍後再點「繼續默認?」
我只想做..
$('#submiteButtonID').click(function(e){
e.preventDefault();
//do ur stuff.
$('#formId').submit();
});
呼叫preventDefault
在第一和使用submit()
功能後..如果u只需要提交表單
不涉及您的點擊事件處理程序中的邏輯。委託給他人負責。 –
我同意.. :) ..感謝您的建議... – bipen
這假設肯定會點擊一個按鈕。如果用戶剛剛從表單中點擊「輸入」按鈕,該怎麼辦?這也將提交表格。所以,依靠點擊提交按鈕可能不是一個好主意。 – StackOverflowNewbie
您可以使用e.preventDefault()
將停止當前操作。
比你可以做$("#form").submit();
$('#form').submit(function (e)
{
return !!e.submit;
});
if(blabla...)
{...
}
else
{
$('#form').submit(
{
submit: true
});
}
當您綁定的.submit()
事件的形式,並在返回(真)之前,做你想做的事情,這些事情發生之前,實際提交。
例如:
$('form').submit(function(){
alert('I do something before the actual submission');
return true;
});
又如上jquery.com:http://api.jquery.com/submit/#entry-examples
你是說表單將不會提交,直到所有代碼在「返回true」之前;語句被執行? – arvinsim
是的,這正是[submit()](http://api.jquery.com/submit/#entry-examples)函數的作用。 –
這不是一個很好的例子,因爲它是同步的。如果我需要做的是異步調用?所以這種情況是「點擊提交 - >做異步的東西,不提交表單 - >在異步回調填充表單中的一些字段 - >從回調提交表單」 –
使用這種方式你會做一個死循環對你的JS。 做你可以使用更好的方法如下
var on_submit_function = function(evt){
evt.preventDefault(); //The form wouln't be submitted Yet.
(...yourcode...)
$(this).off('submit', on_submit_function); //It will remove this handle and will submit the form again if it's all ok.
$(this).submit();
}
$('form').on('submit', on_submit_function); //Registering on submit.
我希望它能幫助! 謝謝!
實際上最好的方法,與異步函數的變化 - https://gist.github.com/BjornMelgaard/8ba0ee9d07c20dd8c8b3550c9df3e9ef – bjornmelgaard
@bjornmelgaard我必須記住,異步是[非標準](https://developer.mozilla.org/ EN-US /文檔/網絡/ API /文檔/異步)。 –
使用jQuery.one()
附加的處理程序爲元素的事件。該處理程序最多各事件類型
$('form').one('submit', function(e) {
e.preventDefault();
// do your things ...
// and when you done:
$(this).submit();
});
它做你想要什麼,你不必擔心多次提交執行每一次元素。
這是最簡單的答案,謝謝! – Eckstein
「驗證注沒有提交循環」:
我只是想檢查的reCAPTCHA和HTML5驗證之前一些其他的東西,所以我做了類似的東西(驗證函數返回true或false):
$(document).ready(function(){
var application_form = $('form#application-form');
application_form.on('submit',function(e){
if(application_form_extra_validation()===true){
return true;
}
e.preventDefault();
});
});
以純Javascript方式,您可以在防止默認情況下提交表單。
這是因爲HTMLFormElement.submit()
never calls的onSubmit()
。所以我們依靠這個規範怪異的方式來提交表單,就好像它沒有自定義的onsubmit處理器一樣。對於同步請求,請參見this fiddle。
等待異步請求的完成起來也很簡單:
var submitHandler = (event) => {
event.preventDefault()
console.log('before')
setTimeout(function() {
console.log('done')
document.getElementById('formId').submit()
}, 1400);
console.log('after')
}
您可以檢查出我的小提琴異步請求的example。
如果你是來與承諾:
var submitHandler = (event) => {
event.preventDefault()
console.log('Before')
new Promise((res, rej) => {
setTimeout(function() {
console.log('done')
res()
}, 1400);
}).then(() => {
document.getElementById('bob').submit()
})
console.log('After')
}
而這裏的that request。
這是笨蛋,就是找不到它: - /。長話短說,你必須再次觸發事件,而不是第二次阻止默認行爲(使用標誌)。 –
@FelixKling你的意思是http://stackoverflow.com/questions/7610871/how-to-trigger-an-event-after-using-event-preventdefault? –