效果:
今天一天一直很煩躁,原因是一直沒(méi)搞定一個(gè)問(wèn)題,最后都下班了,還在這研究了下,終于成功了,心里激動(dòng),前面還以為今天火箭輸球,湖人霸道行徑而打抱不平的
環(huán)境:ruby1.8.6 + rails 2.1.0
事出原因: 為了實(shí)現(xiàn)防止表單的多次提交
出錯(cuò)原因:可能是因?yàn)楸韱问莂jax方式請(qǐng)求導(dǎo)致的
<% form_remote_tag :url => { :action => 'contact' } do %> <%= submit_tag '發(fā) 送',:id=>'submit_button',:onclick=>'return submitform();' %> <% end %> |
1,剛開(kāi)始我試圖在發(fā)送表單是通過(guò)js控制submit_tag,使之變?yōu)閐isable,可是結(jié)果是submit_tag是變disable了,但是表單沒(méi)有發(fā)送
2,然后我試圖通過(guò)submit_tag 的 :disable_with 來(lái)改變,可是結(jié)果是表單發(fā)送了,但是提交過(guò)程中submit_tag沒(méi)有變,這樣還是可以多次提交
然后我去google了,google到了javaeye的文章:
http://www.javaeye.com/post/183435
楞是我搞了半天沒(méi)有成功,最后還是放棄了,
繼續(xù)google,找到了多姿多彩的答案,甚至有人說(shuō)這是一個(gè)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的,沒(méi)有g(shù)oogle解決不了得問(wèn)題,功夫不負(fù)有心人,呵呵,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方法,驗(yàn)證表單之用.
如果后臺(tái)驗(yàn)證失敗需要返回客戶端,重新讓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
write by feng |