效果:

今天一天一直很煩躁,原因是一直沒搞定一個問題,最后都下班了,還在這研究了下,終于成功了,心里激動,前面還以為今天火箭輸球,湖人霸道行徑而打抱不平的
環(huán)境:ruby1.8.6 + rails 2.1.0
事出原因: 為了實現(xiàn)防止表單的多次提交
出錯原因:可能是因為表單是ajax方式請求導致的
<% form_remote_tag :url => { :action => 'contact' } do %>
<%= submit_tag '發(fā) 送',:id=>'submit_button',:onclick=>'return submitform();' %>
<% end %> |
1,剛開始我試圖在發(fā)送表單是通過js控制submit_tag,使之變?yōu)閐isable,可是結果是submit_tag是變disable了,但是表單沒有發(fā)送
2,然后我試圖通過submit_tag 的 :disable_with 來改變,可是結果是表單發(fā)送了,但是提交過程中submit_tag沒有變,這樣還是可以多次提交
然后我去google了,google到了javaeye的文章:
http://www.javaeye.com/post/183435
楞是我搞了半天沒有成功,最后還是放棄了,
繼續(xù)google,找到了多姿多彩的答案,甚至有人說這是一個bug,自己又重寫了submit_tag方法,呵呵,牛
http://awesomerails.wordpress.com/2007/11/08/disable_with-kills-form_remote_tags-ajaxiness/
http://www.nabble.com/Confirm-option-on-submit_tag----not-working-td18160699.html
http://github.com/rails/rails/commit/184cf27b1244734a33833cf2cb9b8062e9ee8a63
一直還是相信google的,沒有google解決不了得問題,功夫不負有心人,呵呵,search到了,所以也就搞定了
http://railsforum.com/viewtopic.php?pid=55125
解決答案:
<% form_remote_tag :url => { :action => 'contact' } , :loading => "$('submit_button').value = 'Sending...';$('submit_button').disable();" do %>
<%= submit_tag '發(fā) 送',:id=>'submit_button',:onclick=>'return submitform();' %>
<% end %> |
其中submitform是js方法,驗證表單之用.
如果后臺驗證失敗需要返回客戶端,重新讓submit_tag為enable效果,可以這樣做
render :update do |page|
page.replace_html 'forgoterror','不存在該郵件'
page[:submit_button].enable
page[:submit_button].value = '發(fā) 送'
|
ref:
http://stackoverflow.com/questions/515376/use-rjs-code-in-the-onclick-event-of-a-button
http://blog.csdn.net/ycl111/archive/2007/01/05/1474844.aspx
posted on 2009-05-07 18:53
fl1429 閱讀(1962)
評論(0) 編輯 收藏 所屬分類:
Rails