2012-04-25 108 views
0

我正在使用验证插件与我的表单,我正在面临与远程函数的一些困难。jquery验证远程函数

我正在使用它来ajax发布到一个文件,然后返回true或false。 当我输入一个电子邮件被采取或采取用户名,它会提示正确的错误信息。

但是,当ajax返回true时,它不会做任何事情。也就是说,直到我点击电子邮件输入框,然后点击重新触发它。那么它会验证它。我曾尝试过很多不同的解决方案,比如onblur触发器等。事情是,所有其他输入字段都是开箱即用,没有问题。 checkmail文件是非常直接的,回应真或假,没有真正的问题,在那里..

这是一个电子邮件检查和用户名检查和规则是相同的两个,除了它调用的文件:

$("#registerHere").validate({ 
onkeyup: false, 
onblur: true, 
rules:{ 
        usr_name: { 
        required: true, 
        minlength: 5, 
        remote: { 
        url: "inc/checkuser2.php", 
        type: "post", 
        async: false 
            } 
        }, 
        full_name:"required", 
        blog_name:"required", 

user_email: { 
    required: true, 
    email: true, 
    remote: { 
     url: "inc/checkmail.php", 
     type: "post", 
     async: false, 
     data: { 
      user_email: function() { 
       return $("#user_email").val() 
      } 
     } 
    } 
}, 
        pwd:{ 
         required:true, 
         minlength: 6 
        }, 
        cpwd:{ 
         required:true, 
         equalTo: "#pwd" 
        }, 
        gender:"required" 
       }, 

       messages:{ 
        usr_name:{ 
        required: "Velg et brukernavn", 
        minlength: "Minimum 5 bokstaver", 
        remote: "Dette brukernavnet er opptatt" 
        }, 

        full_name:"Skriv inn navnet ditt", 
        blog_name:"Velg en tittel til bloggen din", 

        user_email:{ 
         required: "Fyll inn e-post adressen din", 
         email:"Dette er ikke en gyldig e-post adresse", 
         remote:"Denne e-posten finnes allerede" 
        }, 
        pwd:{ 
         required:"Velg passord", 
         minlength:"Passordet må ha 6 tall og bokstaver" 
        }, 
        cpwd:{ 
         required:"Gjenta passordet", 
         equalTo:"Passordene er ikke like" 
        }, 
        gender:"Velg kjønn" 
       }, 

       errorClass: "help-inline", 
       errorElement: "span", 
       highlight:function(element, errorClass, validClass) { 
        $(element).parents('.control-group').addClass('error'); 
       }, 
       unhighlight: function(element, errorClass, validClass) { 
        $(element).parents('.control-group').removeClass('error'); 
        $(element).parents('.control-group').addClass('success'); 
       } 

      }); 

这里是我的checkmail.php(将消毒一次,它的工作原理):

$duplicate = mysql_query("select count(*) as total from users where user_email='$user' ") or die(mysql_error()); 
    list($total) = mysql_fetch_row($duplicate); 
     if ($total > 0) 
     { 
    $valid = 'false'; 
     } else { 
    $valid = 'true'; 
     } 
    echo $valid; 
    exit; 

这不是关键,因为形式似乎提交,但我讨厌离开它这样当我如此接近我想要的东西!

希望这是可以理解的,我真的很感谢任何帮助,因为我阅读并尝试了谷歌给我的一切!

+0

你能告诉我们错误吗?什么使它不起作用 – Gerep 2012-04-25 18:24:20

+0

它不是真的发生错误。它不会首先触发验证事件。我必须通过再次点击输入来重新触发它。那么它工作正常。但是如果使用电子邮件,它会一次触发。 – Havihavi 2012-04-25 18:26:28

+0

您是否尝试过使用http://api.jquery.com/trigger/? – Gerep 2012-04-25 18:27:49

回答

0

我相信,当涉及表单验证插件中的AJAX时,您需要使用回调并返回元素。

onkeyup: function(element) { 
    this.element(element); 
} 

这样做的缺点是,它会执行你的AJAX每KEYUP,所以你要执行某种检查你的回调中。例如:

onkeyup: function(element) { 
    if (element.type == 'password') 
     this.element(element); 
    else 
     return true; 
}