Frage

Ich brauche eine Verzögerung von einer Sekunde in dieser jQuery-Funktion zu setzen, so dass, wenn das Captcha korrekt ausgefüllt wird, eine ausreichende Verzögerung (eine Sekunde, glaube ich) für die #captchaStatus vor dem nächsten Schritt des Verfahrens zu zeigen ( das ist ein hTML) geschrieben werden.

Muss ziemlich einfach sein, obwohl ich jQuery lerne .... Ideen? Danke.

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;
    }
}
War es hilfreich?

Lösung

Sie sollten sein, einen Rückruf verwenden. Besuche dieses jQuery FAQ auf dieser.

  

Der Code funktioniert nicht aufgrund der Art der asynchronen Programmierung gewünscht. Der zur Verfügung gestellte Erfolg Handler wird nicht sofort aufgerufen, sondern zu einem bestimmten Zeitpunkt in der Zukunft, wenn die Antwort vom Server empfangen wird. Wenn wir also den ‚Status‘ Variable unmittelbar nach dem $ Schnipsel Aufruf verwenden, sein Wert ist noch nicht definiert.

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


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

Andere Tipps

Sie könnten fälschen die Verzögerung durch eine gutartige Eigenschaft wie die Opazität von 1 bis 1 über 1 Sekunde Animieren und auf die Fertigstellung Rückruf senden Sie Ihre Form ...

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

Das Geheimnis ist nicht-jQuery JS Funktion setTimeout. Dies wird Ihre Bedienung 1 Sekunde ausführen später:

setTimeout(function() {
  $("#captchaStatus").html("You got it right - I'm sending the email now....");
}, 1000);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top