2014-08-27 85 views
0

我想在用戶提交表單後執行javascript驗證。文檔jQuery .submit()清楚地說:提交時觸發事件

當用戶試圖提交表單時,提交事件發送到元素。

但如果我把

$('form.simple_form.new-channel').submit perform_validation() 

到我的代碼,perform_validation()每觸發呈現頁面時!即使沒有形式,也沒有「提交」按鈕。提交表單後調用函數的正確方法是什麼?

回答

2

我相信你不想在提交後觸發動作,你只是想在用戶點擊提交按鈕後運行它。

這樣工作會不會這樣?

$('form.simple_form.new-channel').submit(function(e){ 
    if(!perform_validation()){ 
    e.preventDefault(); //prevents form from being submitted if validation fails 
    return; //exits function 
    } 
}) 

您的perform_validation函數應返回布爾值。

編輯:

你寫你的函數是這樣的:

$('form.simple_form.new-channel').submit perform_validation() 

這是確切一樣寫:

$('form.simple_form.new-channel').submit; 
perform_validation(); 

在你的版本腳本只是運行perform_validation(),因爲它不在事件處理程序中。

你也可以這樣來做:

$('form.simple_form.new-channel').submit(perform_validation); 

這一個告訴腳本形式運行提交,這名作爲參數傳遞的功能。

+0

這樣的區別是什麼之間你的答案和YM問題的代碼? – Leo 2014-08-27 10:12:47

+0

你如何理解這方面的差異? $('form.simple_form.new-channel')。submit僅提取form.simple_form.new-channel的提交功能代​​碼。 perform_validation()如你所寫,它運行這個函數。 你寫它的方式就像這樣: $('form.simple_form.new-channel')。submit; perform_validation(); – entio 2014-08-27 10:17:08

+0

@Leo看看這個看到的區別:http://stackoverflow.com/a/25179299/827168 – pomeh 2014-08-27 10:17:35

-2

問題是你的語法。

$('form.simple_form.new-channel').submit perform_validation() 

,因爲JavaScript的慷慨的事實,你不調用提交這裏,你有perform_validation後無semicolin ......不會引起任何錯誤,但只是調用執行驗證,如果它是對所有通過其自身的線用半乳糖。

糾正這一點,做到這一點

$('form.simple_form.new-channel').submit(perform_validation); 
+1

你剛剛犯了同樣的錯誤;過早的調用。 閱讀此:http://tobyho.com/2011/10/26/js-premature-invocation/ – entio 2014-08-27 10:35:52

+0

@entio是正確的。這兩行都是等價的,但是第一個'$''form.simple_form.new-channel'。submit perform_validation()'只是CoffeScript代碼,在'submit'方法中不需要括號 – pomeh 2014-08-27 10:42:58

+0

@DaleCorns你可以投票他們只有在他們不回答OP問題的時候,這確實是你的回答沒有做的。你可以編輯和修正你的答案,然後我可以刪除我的downvote,但是因爲已經有一個公認的答案,根本沒有意義。 – pomeh 2014-08-27 11:15:21