jQuery函数在另一个函数有效后运行

时间:2013-01-22 14:38:02

标签: jquery validation

我想检查电子邮件地址是否已存储在数据库 后,电子邮件地址是否有效。我有两个功能完美,但同时,两个功能。我想要'检查电子邮件是否在数据库中'功能,以便在'检查电子邮件是否有效'之后运行。

电子邮件验证:

$(document).ready(function(){
$("#SignUp").validate({
    rules:{
        email:{
            required:true,
            email:true
        },
    },
    messages:{
        email:{
            required:"Enter your email address",
            email:"Enter valid email address"
        },
        gender:"Select Gender"
    },
    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');
    }
    });
});

电子邮件可用性检查:

    $(function()
{
    $('#email').keyup(function()
    {
        var email=$(this).val();
        if(email!=''){
   //$('.check').show();
   $('error').fadeIn(400).html
   ('<img src="/img/ajax-loading.gif" />');
   var dataString = 'email='+ email;
   $.ajax({
    type: "POST",
    url: "pages/check_email.php",
    data: dataString,
    cache: false,
    success: function(result){
        if(result=='Available'){
            $('.check').html(email+' Avaliable');
            $('#create').attr('disabled', '');
            $('#create').attr('value', 'Active');
            $("#email").removeClass("red");
            $("#email").addClass("white");
        }else{
            $('.check').html(email+' '+result);
            $('#create').attr('disabled', 'disabled');
            $('#create').attr('value', 'Deactive');
            $("#email").removeClass("white");
            $("#email").addClass("red");
        }
    }
   });
}else{
    $('.check').html('');
    $('#submit').attr('disabled', 'disabled');
    $('#submit').attr('value', 'Deactive');
}
});
});

有没有办法访问第一个函数来检查email:true,然后调用第二个函数?

2 个答案:

答案 0 :(得分:0)

不,您无法从外部访问函数局部变量。

你可以在函数内部创建一个闭包,并通过该闭包访问它,但那是非常不同的。

答案 1 :(得分:0)

jQuery Validate有一个内置函数 - 名为remote。如果你这样指定:

$("#SignUp").validate({
rules:{
    email:{
        required:true,
        email:true,
        remote: 'pages/check_email.php'
    },
},
//rest of options
});

然后它会自动将email帖子变量发送到您的check_email.php脚本。让该脚本返回"true""false"。我相信默认行为将首先检查电子邮件,然后将其发送到您的AJAX脚本。你可以在这里看到一个例子:http://jsfiddle.net/ryleyb/PdP69/请注意,在jsfiddle上,由于网站的工作方式,你必须在指定远程页面时更复杂一点......但是你会看到控制台在电子邮件地址有效之前它不会进入远程。