2009-10-28 123 views
0

我需要在此jQuery函数中放置一秒的延迟,以便在正确填写验证码时,对于之前显示的#captchaStatus有足够的延迟(我认为是一秒)该过程的下一步(这是一个html被张贴)。在jQuery函数中需要延迟

必须相当容易,虽然我正在学习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; 
    } 
} 

回答

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); 
    } 
    }); 
} 
+0

此外,如果你是不可救药的懒惰,你可以设置async为false。请注意,这将导致UI在通话期间冻结。 – 2009-10-28 00:36:35

+0

我想他想在向用户展示成功消息和发布表单之间暂停一秒。 – joshperry 2009-10-28 00:45:39

+0

这就是我想要做的,暂停一下...... – markratledge 2009-10-28 01:13:24

1

你可以通过假动画一些良性的属性,如不透明度从1到1比1秒,在完成回调提交表单中的延迟......

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

我想懒惰,尝试这个,但我不能得到它的工作。看起来像我应该学习如何使用回调,如上所述? – markratledge 2009-10-28 01:12:20

0

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

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

无法让它工作。 “#captchastatus”打印的文字实际上更快了。 – markratledge 2009-10-28 18:17:49