表单始终提交Jquery验证引擎

时间:2011-08-13 17:43:29

标签: jquery forms jquery-validation-engine

今天早上我被the Jquery Validation Engine和codeigniter困住了。我有一个名字,电子邮件,密码的表格......我用Jquery检查所有这些fiels然后在php中。

当用户输入已经使用的电子邮件时,会出现一个工具箱,其中包含错误消息,但表单仍然提交...如果我留下一个空的电子邮件字段,则不会提交。 所以我想当它在数据库中检查时它之后没有做好动作(它返回false ...)

这是我视图中的代码:

    <?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 个答案:

答案 0 :(得分:1)

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*/]

答案 1 :(得分:0)

我在寻找另一个问题时偶然发现了这一点。在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有用的东西。

祝你好运。

答案 2 :(得分:0)

您需要使用属于ValidationEngine的onAjaxFormComplete函数。请注意他们的文档中说明:

  

请注意,如果您使用ajax表单验证程序,则实际结果将异步传递给函数options.onAjaxFormComplete。

然后您可以访问4条信息,但是您真正感兴趣的只是状态和形式。

因此,您附加到表单的初始代码将变为:

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

现在表格只应在没有问题的情况下提交。

答案 3 :(得分:0)

在这里打电话之后,你基本上都是告诉它提交它:

    **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 

                                   });
                                          });