web-dev-qa-db-fra.com

Réinitialiser le formulaire de contact recaptcha 7

J'ai plusieurs formulaires (formulaire de contact 7) dans une page et je dois réinitialiser le recaptcha après l'envoi du formulaire via ajax. J'ai vérifié l'API recaptcha et il a grecaptcha.reset(); mais il ne réinitialise que le premier recaptcha dans une page.

Voici la méthode pour cibler un recaptcha spécifique en fonction de l’API recaptcha:

grecaptcha.reset(
    opt_widget_id
)

Le problème ici est que je ne peux pas mettre la main sur l'instance (opt_widget_id) de recaptcha car elle est créée par le formulaire de contact 7.

Comment obtenir opt_widget_id dans une page comportant plusieurs formulaires, afin de pouvoir réinitialiser un recaptcha spécifique.

1
roshan

Puisque recaptcha est créé par le formulaire de contact 7 sans affecter le recaptcha rendu à une variable, il n'a pas été possible d'utiliser grecaptcha.reset (opt_widget_id). Voici ce qui est fait:

$(".wpcf7-submit").click(function(event) {
var currentForm=$(this).closest("form");
$( document ).ajaxComplete(function(event,request, settings) {
    var responseObj=JSON.parse(request.responseText);
    if(responseObj.mailSent==true){
        //reset recaptcha
        var recaptchaIFrame=currentForm.find("iframe").eq(0);
        var recaptchaIFrameSrc=recaptchaIFrame.attr("src");
        recaptchaIFrame.attr("src",recaptchaIFrameSrc);
    }
   });
});

J'ai effacé la source d'iframe et réaffecté le même code src afin qu'il recharge le recaptcha une fois qu'il a été soumis.

J'espère que ça aidera quelqu'un !

2
roshan

Pour ce faire, j'ai ajouté le code ci-dessous dans "Paramètres supplémentaires" du formulaire de contact.

on_sent_ok: "grecaptcha.reset()"

J'espère que cela aide les autres

1
Maulik Vora