【问题标题】:Form always submitted Jquery Validation Engine表单总是提交 Jquery 验证引擎
【发布时间】:2011-08-13 17:43:28
【问题描述】:

从今天早上开始,我就被 the 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,当我输入已使用的电子邮件时,它会显示 已使用的电子邮件,但我不明白为什么要验证表单。

有人有想法吗?

【问题讨论】:

    标签: jquery forms jquery-validation-engine


    【解决方案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*/]
    

    【讨论】:

      【解决方案2】:

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

      祝你好运。

      【讨论】:

        【解决方案3】:

        您需要使用作为 ValidationEngine 一部分的 onAjaxFormComplete 函数。请注意他们的文档中指出:

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

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

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

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

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

        【讨论】:

          【解决方案4】:

          您基本上是在告诉它在此处调用之后提交它:

              **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 
          
                                             });
                                                    });
          

          【讨论】:

            猜你喜欢
            • 2023-04-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-03-30
            • 2021-09-08
            • 1970-01-01
            相关资源
            最近更新 更多