2015-05-22 3 views
0

На мой взгляд, у меня есть:Rails submit_tag форма проверки

event.html.erb

<div class="form-group registration_form"> 
      <%= form_tag(register_learner_path, {remote: true}) do -%> 
       <p> 
       <%= label_tag :email %> 
       <%= text_field_tag :email %> 
       <p/> 
       <p> 
       <%= label_tag "First Name" %> 
       <%= text_field_tag :first_name %> 
       <p/> 
       <p> 
       <%= label_tag "Last Name" %> 
       <%= text_field_tag :last_name %> 
       <p/> 
       <%= hidden_field_tag 'event_id', @event.id %> 
       <p class="submit_register"> 
       <%= submit_tag "Register for this event", id: 'register_button', :onclick => "return validateform();" %> 
        <span class="help-block">Enter your name and email above and the link will be magically revealed</span> 
       <p/> 
      <%- end -%> 
      </div> 

... и мой CoffeeScript является:

events.js.coffee

jQuery -> 
    if $('div').hasClass 'form-group registration_form' 
     $(".location").hide() 
     $(".location-section-link").hide() 
     $(".submit_register").click -> 
      validateForm() 
      if validateEmail($("#email").val()) == false 
       alert('Please enter a valid email address') 
       return false 
      else 
       $(".location").show() 
       $(".location-section-link").show() 
       $(".registration_form").hide() 

    #validate email 
    validateEmail = (email) -> 
     re = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i 
     re.test email 

    #validate email, first name and last name 
    validateForm = -> 
     if $("#email").val() == '' || $("#first_name").val() == '' || $("#last_name").val() == '' 
       alert('Please enter first name, last name, and email') 
       return false 

По существу, я пытаюсь выполнить две проверки здесь. Один я хочу, чтобы не было пустых строк в электронной почте, имени и фамилии. Во-вторых, я хочу проверить «действительное» электронное письмо на основе регулярного выражения в js.

Поведение, которое я вижу с помощью этого кода, заключается в том, что обе проверки выполняются, однако я хочу, чтобы проверка подлинности электронной почты выполнялась только при прохождении другой проверки (теста пустых строк).

+1

'$ ('div'). HasClass 'form-group registration_form'' просто странно. Вы выбираете каждый «div» на странице, а затем фильтруете их, что ужасно для производительности. Используйте '$ group = $ ('. Form-group.registration_form')' 'if $ group.length' – max

+0

@papirtiger Просто для проверки sanidty https://gist.github.com/marklocklear/5f2b61f2d3b66441824a – Lumbee

+0

Лучше. Также ['submit_tag'] (http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-submit_tag) создает элемент' ', который не имеют контент, он имеет только атрибут value, который указывает текст, что вы хотите ['button_tag'] (http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-button_tag) , И избавиться от атрибута onclick, пока вы на нем. – max

ответ

2

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

jQuery -> 
    $group = $('.form-group.registration_form') 
    if $group.length 
     $(".location").hide() 
     $(".location-section-link").hide() 
     $(".submit_register").click -> 
      if validateForm() == false 
       return false 
      else if validateEmail($("#email").val()) == false 
       alert('Please enter a valid email address') 
       return false 
      else 
       $(".location").show() 
       $(".location-section-link").show() 
       $(".registration_form").hide() 

    #validate email 
    validateEmail = (email) -> 
     re = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i 
     re.test email 

    #validate email, first name and last name 
    validateForm = -> 
     if $("#email").val() == '' || $("#first_name").val() == '' || $("#last_name").val() == '' 
       alert('Please enter first name, last name, and email') 
       return false 
+0

Что делать, если вы переместили оповещение по электронной почте на функцию электронной почты и выполнили это 'if! ValidateForm || ! validateEmail ($ ('# email'). val()) return false' проверяет его в порядке, поэтому, если 'validateForm' возвращает' false', оно становится истинным и 'validateEmail' не запускается, и мы возвращаем' false' , в результате чего форма не отправляется. если 'vForm' является' истинным', он становится 'false' и проверяется' vEmail', если оба возвращают 'true' и перевернуты,' return false' не выполняется, и форма продолжается нормально. – Clark

Смежные вопросы