【问题标题】:How to validate an Ajax Form Submit (remote_form_tag)?如何验证 Ajax 表单提交(remote_form_tag)?
【发布时间】:2010-08-12 04:03:21
【问题描述】:

我有一个像

这样的 ajax 邮件表单
  - form_remote_tag :url=>mails_path,:condition=>"validate_mail()", :html => {:id=>"mailform",:method => :post, :class => 'ajax',:style=>"padding:15px;" } do |form|
    .gimmespace 
      Naam 
      %br
      = text_field_tag :name,params[:name],:class=>"title required"
    .gimmespace 
      Telefoonnummber 
      %br
      = text_field_tag :phone,params[:phone],:size=>25,:class=>"title"
    .gimmespace 
      Mailadres 
      %br
      = text_field_tag :email,params[:email],:size=>30,:class=>"title required"
    .gimmespace 
      Onderwerp 
      %br
      = text_field_tag :subject,params[:subject],:class=>"title required"
    .gimmespace
      Boodschap 
      %br
      = text_area_tag :message,params[:message],:rows=>10,:cols=>45,:class=>"title required"
    .gimmespace
      = submit_tag "Verstuur",:id=>"mailsubmit",:class=>"sendBtn"
      %button{:onclick=>"$.fn.colorbox.close();"} Annuleer

以上代码在 HAML 中。它使 ajax 表单提交给控制器。我必须在提交之前验证这些字段。所以,我尝试了几个东西。我阅读了这篇文章http://hillemania.wordpress.com/2006/09/18/rails-ajax-pre-submit-form-validation/ 并对测试javascript函数进行了回调以进行验证。这是javascript验证函数。

function validate_mail() {
        alert("Your Name, Email, Subject and Body Content are Required !");
        return false;

}

根据上面的函数,它以任何方式返回 false,并且表单不应该被提交,但是,它以 ajaxically 的方式提交。有没有其他办法,请帮忙。

【问题讨论】:

    标签: javascript ruby-on-rails ajax haml


    【解决方案1】:

    我认为您想使用:condition 选项而不是:before 选项。像这样的:

      - form_remote_tag :url=> mails_path, :condition => "validate_mail()", ...
    

    那么,如果您的 condition 函数返回 false,则不应提交表单。

    当然,您需要修改您的validate_mail() 函数来实际测试每个表单字段是否为空:

    if ($('name').value == '' || $('phone').value == '' || ... ) {
      alert('Something was blank...');
      return false;
    } else {
      return true;
    }
    

    我的 Prototype 语法很生疏——不过这应该能让你走上正轨。

    【讨论】:

    • rails 2.3.8 文档这样说“:condition 通过这个表达式有条件地执行远程请求。使用它来描述浏览器端的条件什么时候不应该发起请求。” ..我做到了,但仍然提交了表单... :(
    • 你能把form_remote_tag生成的代码贴出来吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-25
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    • 2014-09-10
    • 2016-01-31
    相关资源
    最近更新 更多