我想在用戶提交表單後執行javascript驗證。文檔jQuery .submit()
清楚地說:提交時觸發事件
當用戶試圖提交表單時,提交事件發送到元素。
但如果我把
$('form.simple_form.new-channel').submit perform_validation()
到我的代碼,perform_validation()
每觸發呈現頁面時!即使沒有形式,也沒有「提交」按鈕。提交表單後調用函數的正確方法是什麼?
我想在用戶提交表單後執行javascript驗證。文檔jQuery .submit()
清楚地說:提交時觸發事件
當用戶試圖提交表單時,提交事件發送到元素。
但如果我把
$('form.simple_form.new-channel').submit perform_validation()
到我的代碼,perform_validation()
每觸發呈現頁面時!即使沒有形式,也沒有「提交」按鈕。提交表單後調用函數的正確方法是什麼?
我相信你不想在提交後觸發動作,你只是想在用戶點擊提交按鈕後運行它。
這樣工作會不會這樣?
$('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);
這一個告訴腳本形式運行提交,這名作爲參數傳遞的功能。
問題是你的語法。
$('form.simple_form.new-channel').submit perform_validation()
,因爲JavaScript的慷慨的事實,你不調用提交這裏,你有perform_validation後無semicolin ......不會引起任何錯誤,但只是調用執行驗證,如果它是對所有通過其自身的線用半乳糖。
糾正這一點,做到這一點
$('form.simple_form.new-channel').submit(perform_validation);
你剛剛犯了同樣的錯誤;過早的調用。 閱讀此:http://tobyho.com/2011/10/26/js-premature-invocation/ – entio 2014-08-27 10:35:52
@entio是正確的。這兩行都是等價的,但是第一個'$''form.simple_form.new-channel'。submit perform_validation()'只是CoffeScript代碼,在'submit'方法中不需要括號 – pomeh 2014-08-27 10:42:58
@DaleCorns你可以投票他們只有在他們不回答OP問題的時候,這確實是你的回答沒有做的。你可以編輯和修正你的答案,然後我可以刪除我的downvote,但是因爲已經有一個公認的答案,根本沒有意義。 – pomeh 2014-08-27 11:15:21
這樣的區別是什麼之間你的答案和YM問題的代碼? – Leo 2014-08-27 10:12:47
你如何理解這方面的差異? $('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
@Leo看看這個看到的區別:http://stackoverflow.com/a/25179299/827168 – pomeh 2014-08-27 10:17:35