2009-10-28 81 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