2015-02-04 2 views
1

Я пытаюсь проверить свою форму, распечатав сообщение, если сообщение недействительно, если пароль не соответствует минимальным требованиям или если поля пароля и подтверждения пароля не совпадают.JQuery Подтвердить плагин, если он не должен

Чтобы проверить, работает ли плагин правильно, я проверяю только на достоверность сообщения. Кажется, что валидатор работает на секунду до того, как форма будет отправлена ​​независимо от того, является ли форма действительной или нет, и я не могу понять, почему.

Кроме того, сообщение электронной почты недействительно не распечатывается.

Я пытался понять это в течение некоторого времени, и я ценю любые предложения.

Заранее благодарен!

JavaScript:

$('#signUpForm').validate({ // initialize the plugin 
    errorPlacement: function(error, element) {}, 
    rules: { 
     email: { 
      required: true, 
      email: true 
     } 
    } 
}); 

$('#signUpForm').submit(function(e){ 
    e.preventDefault(); 
    if($(this).valid()){ 
     $(this).submit(); 
    }else{ 
     return false; 
    }   
}); 

Форма:

<form id="signUpForm" method="post" action="signup.php"> 
    <input id="signUpEmail" name="email" class="form-control"> 
    <input id="signUpPassword" name="password" class="form-control" type="password"> 
    <input id="confirmPassword" name="confirmPassword" class="form-control" type="password"> 
</form> 
+0

Для правильного использования обратитесь к [документации] (http://jqueryvalidation.org) и [странице Wiki Wiki] (http://stackoverflow.com/tags/jquery-validate/info). – Sparky

+0

@Sparky, Спасибо за ответ. см. обновленный код, результат тот же. – AnchovyLegend

+1

Ваш «обновленный» код работает нормально: http://jsfiddle.net/2t7dbuuf/ – Sparky

ответ

0

Эта конфигурация все неправильно ...

$('#signUpForm').validate({ // initialize the plugin 
    .... 
}); 

$('#signUpForm').submit(function(e){ 
    ....  
}); 

.submit() Ваш обработчик полностью избыточными и полностью мешая правильной работы плагина jQuery Validate, который автоматически захватывает кнопку click и блокирует событие submit.

Другими словами, код внутри вашего обработчика .submit() функционально идентичен тому, что плагин уже делает для вас. Вам это не нужно, и это нарушает проверку.


Ваша errorPlacment функция обратного вызова пустой, так что собирается прекратить все сообщения об ошибках отображения ...

errorPlacement: function(error, element) {}, 

Он должен просто выглядеть примерно так ...

$('#signUpForm').validate({ // initialize the plugin 
    rules: { 
     email: { 
      required: true, 
      email: true 
     }, 
     password: { 
      required: true, 
      minlength: 8, 
      maxlength: 12 
     }, 
     confirmPassword: { 
      equalTo: '#signUpPassword' 
     } 
    } 
}); 

ДЕМО: http://jsfiddle.net/2t7dbuuf/


См the documentation и SO Tag Wiki page для правильного использования.

+0

Спасибо Sparky, хотя проблема остается. Проверка выполняется на секунду, затем форма отправляется независимо от того, действительна ли форма или нет. – AnchovyLegend

+0

@ AnchovyLegend, можете ли вы воспроизвести проблему в jsFiddle? В противном случае код, как вы «обновляете», работает здесь: http://jsfiddle.net/2t7dbuuf/ – Sparky

+0

Хотя я не смог воспроизвести его в jsfiddle.Я нашел причину, проблема связана с тем, что я использую paypal pay gateway, называемый braintree, который требует определенных полей ввода, чтобы ** не ** имел атрибут 'name'. Вместо этого входной атрибут называется 'data-braintree-name'. После удаления этих полей ввода для тестирования валидация работает, хотя эти поля шлюза платежей необходимы для моего приложения, поэтому я как бы застрял на данный момент:/ – AnchovyLegend

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