Форма всегда отправляется Jquery Validation Engine - PullRequest
1 голос
/ 13 августа 2011

Я застрял с этого утра с Jquery Validation Engine и codeigniter. У меня есть форма с именем, адресом электронной почты, паролем ... и я проверяю все эти поля с помощью Jquery, а затем в php.

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

Это код на мой взгляд:

    <?php $data_email_signup = array(
        'name'        => 'email_signup',
        'id'          => 'email_signup',
        validate[required,custom[email],ajax[ajaxEmailCall]]'
                        );
            echo form_input($data_email_signup); ?>
...
...

jQuery(document).ready(function(){
    jQuery("#form_signup").validationEngine({
        submitHandler: function(form) {
            form.submit();
        }
    });
});

В jquery.validationEngine-fr.js У меня есть:

"ajaxEmailCall": {
     "url": "/.../ajaxValidateFieldEmail.php",
     "alertTextLoad": "* Please wait",
     "alertText": "* Email already used"
                },

В файле ajaxValidateFieldEmail.php У меня есть:

<?php
$validateValue=$_POST['fieldValue'];
$validateId=$_POST['fieldId'];
$arrayToJs = array();
$arrayToJs[0] = $validateId;
$resultats=$connexion->query("SELECT ...");
$count = $resultats->rowCount();                
if($count == 0){        
    $arrayToJs[1] = true;
    echo json_encode($arrayToJs);
}
else {
    $arrayToJs[1] = false;
    echo json_encode($arrayToJs);
}
?>

Firebug возвращает FALSE и отображает Электронная почта уже использовалась , когда я ввожу уже использованную электронную почту, но я не понимаю, почему форма все равно проверяется.

У кого-нибудь есть идея?

Ответы [ 4 ]

1 голос
/ 29 марта 2012

Код в jquery.validationEngine-fr.js вроде бы в порядке.Но когда вы отправляете полную форму, она должна обрабатываться по-другому.Я использую пользовательский URL для целей проверки, потому что я не хочу, чтобы проверка выполняла то же действие, что и форма.В случае успеха я отсоединяю механизм проверки, потому что когда-то он выполнял бесконечный цикл

$("#frmAddUser").validationEngine({ajaxFormValidation: true,
      ajaxFormValidationURL: '/users/validate',
      onAjaxFormComplete: function(status, form, json_response_from_server, options)  {
          if (status === true) {
             //validationengine falling into infinite loop
             form.validationEngine('detach');
             form.submit();
          }
      }
 });

Поскольку это проверка формы, ответ от сервера должен отличаться от простой проверки AJAX, должен быть массивмассив такой:

[[fieldId1, status1, message1], [fieldId2, status2, message2]/*optional*/]
0 голосов
/ 21 января 2014

Вы в основном говорите, чтобы он отправлял его независимо от вызова здесь:

    **submitHandler: function(form) {

           form.submit();
      }**

Возможно, вам потребуется использовать чек с функцией обратного вызова

  function ajaxValidationCallback(status, form, json, options)
  {
 if (status === true) form.submit();
  } 

, а затемопределите это как:

                         jQuery(document).ready(function($){
                            $("#form_signup").validationEngine({
                                           ajaxFormValidation: true,
                                           ajaxFormValidationMethod: 'post',
                                           onAjaxFormComplete: ajaxValidationCallback 

                                   });
                                          });
0 голосов
/ 14 марта 2012

Вам необходимо использовать функцию onAjaxFormComplete, которая является частью ValidationEngine.Обратите внимание, что в их документации говорится:

Обратите внимание, что если вы используете валидатор формы ajax, фактический результат будет доставлен асинхронно в функцию options.onAjaxFormComplete.

Youзатем получите доступ к 4 частям информации, однако единственные, которые вас действительно интересуют, это статус и форма.

Таким образом, ваш первоначальный код для присоединения к форме:

    jQuery(document).ready(function(){
        jQuery("#form_signup").validationEngine({
            onAjaxFormComplete: function(status,form) {
                if (status === true) {
                    form.submit();
                }
            }
        });
    });

ТеперьФорма должна быть отправлена ​​только при отсутствии проблем.

0 голосов
/ 08 ноября 2011

Я наткнулся на это, когда искал другую проблему. В jquery.validationEngine.js

_onSubmitEvent: function() {
            var form = $(this);
            var options = form.data('jqv');

            // validate each field (- skip field ajax validation, no necessary since we will perform an ajax form validation)

Я не знаю вас, относится ли это к вашей проблеме, или если вы решили ее, но этот комментарий, похоже, относится к вашей проблеме.

Кроме того, я бы позаботился о том, чтобы ваш AJAX возвращал что-то полезное для вашего jquery.

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...