效果:
今天一天一直很烦躁,原因是一直没搞定一个问题,最后都下班了,还在这研究了下,终于成功了,心里激动,前面还以为今天火箭输球,湖人霸道行径而打抱不平的
环境:ruby1.8.6 + rails 2.1.0
事出原因: 为了实现防止表单的多次提交
出错原因:可能是因为表单是ajax方式请求导致的
<% form_remote_tag :url => { :action => 'contact' } do %>
<%= submit_tag '发 送',:id=>'submit_button',:onclick=>'return submitform();' %>
<% end %> |
1,刚开始我试图在发送表单是通过js控制submit_tag,使之变为disable,可是结果是submit_tag是变disable了,但是表单没有发送
2,然后我试图通过submit_tag 的 :disable_with 来改变,可是结果是表单发送了,但是提交过程中submit_tag没有变,这样还是可以多次提交
然后我去google了,google到了javaeye的文章:
http://www.javaeye.com/post/183435
楞是我搞了半天没有成功,最后还是放弃了,
继续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 '发 送',: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 = '发 送'
|
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 阅读(1954)
评论(0) 编辑 收藏 所属分类:
Rails