随笔-167  评论-65  文章-0  trackbacks-0

效果:

image

今天一天一直很烦躁,原因是一直没搞定一个问题,最后都下班了,还在这研究了下,终于成功了,心里激动,前面还以为今天火箭输球,湖人霸道行径而打抱不平的

环境: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



write by feng
posted on 2009-05-07 18:53 fl1429 阅读(1947) 评论(0)  编辑  收藏 所属分类: Rails

只有注册用户登录后才能发表评论。


网站导航:
 
已访问数:
free counters