2012-05-29 148 views
25

我使用jQuery與驗證插件提交的http://docs.jquery.com/Plugins/Validation/validate從jQuery驗證插件的功能submitHandler

防止形式我想阻止的形式從通過AJAX完成了它的有效性和提交過程後提交。 我有以下代碼:

$("#myform").validate({ 
    rules: {...}, 
    submitHandler: function(form) { 
     alert("Do some stuff..."); 
     //submit via ajax 
     return false; //This doesn't prevent the form from submitting. 
    } 
}); 

然而,這個問題是submitHandler提交表單,即使我有在處理函數的最後一行return false;聲明。我想阻止默認行爲並停止提交表單,因爲我已經通過ajax提交。

在通過submitHandler函數中的ajax代碼後,我應該如何停止提交代碼?

回答

38

我不喜歡這樣,它的工作原理究竟如何你:這樣看來,唯一的解決辦法是return false聲明這樣submitHandler: function(form){並不需要一個事件參數希望它的工作:

$("#myform").submit(function(e) { 
    e.preventDefault(); 
}).validate({ 
    rules: {...}, 
    submitHandler: function(form) { 
     alert("Do some stuff..."); 
     //submit via ajax 
     return false; //This doesn't prevent the form from submitting. 
    } 
}); 
+0

完全按照我的說法得到 ReferenceError:e未定義 e.preventDefault(); –

+0

我還得到ReferenceError:e沒有定義e.preventDefault();任何想法這到底意味着什麼? – Damainman

+0

我知道這是一箇舊帖子,但如果有人遇到同樣的問題,他們應該輸入event.preventDefauld()來代替。 e是事件的捷徑。如果你想讓e工作,把e放在功能括號之間,就像這個函數(e)一樣。 – thar

1

您可以submit事件致電event.preventDefault()

$("#myform").on("submit", function(event) { 
    event.preventDefault(); 
}); 
+0

submitHandler函數似乎沒有帶一個事件參數。 – Carven

+0

@xEnOn是的,這就是爲什麼我會單獨向表單添加'submit'事件。 – VisioN

2

也許你可以在外部驗證不使用一個提交按鈕:

if($("#myform").valid()){ 
    alert("Do some stuff..."); 
} 
0

不幸似乎調用:

... 
submitHandler: function(form) { 
    //your code 
    return false; 
}, 
... 
20
$("#myform").validate({ 
    rules: {...}, 
    submitHandler: function(form, event) { 
     event.preventDefault(); 
     alert("Do some stuff..."); 
     //submit via ajax 
    } 
}); 

希望這有助於。

+1

這可能有助於向提出問題的人解釋event.preventDefault()是做什麼的,以及它爲什麼起作用(或提供對它的引用) –

+3

掛鉤到版本1.12.0的源代碼中,很明顯配置'submitHandler '會自動防止默認行爲。另外,如@ user3157665所示,處理程序的簽名是'submitHandler(form,event)'(文檔與源代碼不同步)。 – Younes