web-dev-qa-db-ja.com

連絡フォーム7のリセット

1つのページに複数のフォーム(連絡フォーム7)があり、フォームがajaxを介して送信された後に要約をリセットする必要があります。 recaptcha APIをチェックしたところ、grecaptcha.reset();がありましたが、ページ内の最初のrecaptchaしかリセットされませんでした。

以下は、recaptcha APIに従って特定のrecaptchaをターゲットにする方法です。

grecaptcha.reset(
    opt_widget_id
)

ここでの問題は、recaptchaのインスタンス(opt_widget_id)は連絡フォーム7で作成されているため、このインスタンスを取得できないことです。

特定の要約をリセットできるように、複数のフォームを持つページでopt_widget_idを取得する方法.

1
roshan

Recaptchaはレンダリングされたrecaptchaを変数に割り当てずにcontact form 7によって作成されるので、grecaptcha.reset(opt_widget_id)を使うことは不可能でした。これがされることはここにあります:

$(".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);
    }
   });
});

私はiframeのソースをクリアし、同じsrcを再割り当てしました。送信されたときにrecaptchaをリロードします。

これが誰かに役立つことを願っています!

2
roshan

連絡フォームの「追加設定」に以下のコードを追加してこれを行いました。

on_sent_ok: "grecaptcha.reset()"

これが他の人に役立つことを願っています

1
Maulik Vora