需要延迟jQuery函数

时间:2009-10-28 00:28:14

标签: jquery delay

我需要在这个jQuery函数中加一秒钟,以便在正确填写验证码时,#captchaStatus在下一步之前显示有足够的​​延迟(我认为是一秒)该过程(发布的是html)。

必须相当容易,虽然我正在学习jQuery ....想法?感谢。

function validateCaptcha()
{
    challengeField = $("input#recaptcha_challenge_field").val();
    responseField = $("input#recaptcha_response_field").val();
    //alert(challengeField);
    //alert(responseField);
    //return false;
    var html = $.ajax({
    type: "POST",
    url: "/wp-content/themes/default/ajax.recaptcha.php",
    data: "recaptcha_challenge_field=" + challengeField + "&recaptcha_response_field=" + responseField,
    async: false
    }).responseText;

    if(html == "success")
    {
        $("#captchaStatus").html("You got it right - I'm sending the email now....");
        return true;
    }
    else
    {
        $("#captchaStatus").html("Your captcha is incorrect - please try again...");
        Recaptcha.reload();
        return false;
    }
}

3 个答案:

答案 0 :(得分:4)

你应该使用回调。看看this jQuery FAQ item on this.

  

由于异步编程的性质,代码无法正常工作。提供的成功处理程序不会立即调用,而是在将来从服务器收到响应时的某个时间调用。因此,当我们在$ .ajax调用之后立即使用'status'变量时,它的值仍未定义。

 getUrlStatus('getStatus.php', function(status) {
    alert(status);
 });


function getUrlStatus(url, callback) {
  $.ajax({
     url: url,
     complete: function(xhr) {
         callback(xhr.status);
     }
  });
}

答案 1 :(得分:1)

你可以通过动画一些良性属性来伪造延迟,比如不透明度从1到1超过1秒,并在完成回调时提交你的表格......

$("#captchaStatus")
    .html("You got it right - I'm sending the email now....")
    .animate({opacity: 1.0}, 1000, "linear", function() {
        submitMyForm();
    });

答案 2 :(得分:0)

秘密是非jQuery JS函数setTimeout。这将在1秒后执行您的操作:

setTimeout(function() {
  $("#captchaStatus").html("You got it right - I'm sending the email now....");
}, 1000);