Как проверить отправку формы Ajax (remote_form_tag)?

У меня есть почтовая форма 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, и форма не должна быть отправлена, но она отправляется хорошо ajaxly. Есть ли другой способ, пожалуйста, помогите.


person Anand    schedule 12.08.2010    source источник


Ответы (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;
}

Синтаксис моего прототипа заржавел, но это должно привести вас на правильный путь.

person nfm    schedule 12.08.2010
comment
Документы rails 2.3.8 говорят следующее: condition Выполнять удаленный запрос условно с помощью этого выражения. Используйте это для описания условий на стороне браузера, когда запрос не должен инициироваться. .. Я сделал это, но форма все равно отправляется... :( - person Anand; 12.08.2010
comment
Можете ли вы опубликовать код, сгенерированный form_remote_tag? - person nfm; 12.08.2010