Googleの新しい非表示のreCaptchaを使用するCMSアプリケーションでWebサイトのフォームを作成しています。
しかし、私はreCaptchaのコールバックを使用する方法に固執していますか?
キャプチャを使用する前は、コードは非常に単純でした。
[〜#〜] html [〜#〜]
<form>
Form input fields here...
<button id="a23k4l234lj2l-submit-button"></button>
</form>
jQuery
$('#a23k4l234lj2l-submit-button').click(function (e) {
e.preventDefault();
var that = $(this);
if(Abayo.validate(that)) {
Abayo.submit(that);
}
})
Abayo
ライブラリには、特定のフォームを検証し、フォームデータを処理するスクリプトにデータを送信する関数があります。
ここで、reCaptchaをフォームに追加します。 documentation は次のように述べています。
1 data-size = 'invisible'でdivを作成します。
<div class="g-recaptcha" data-sitekey="your_site_key" data-callback="onSubmit" data-size="invisible"> </div>
2javascriptメソッドからgrecaptcha.executeを呼び出します。
grecaptcha.execute();
これは機能しますが、キャプチャのコールバック関数は、ユーザーの応答を確認するための応答コードのみを提供します。
ユーザーの応答g-recaptcha-responseが、コールバック関数の入力になります。
応答は、サーバーに要求を送信できるかどうかのみを示します。
必要なのは、送信ボタン、DOM要素、またはボタンと一致するフォームからデータを取得するためのボタンの任意の種類のIDの場所です。
次のコードでは、フォームからデータを取得してサーバーに送信できませんか?
$('#a23k4l234lj2l-submit-button').click(function (e) {
e.preventDefault();
grecaptcha.execute();
})
var onSubmit = function(response) {
// var that cannot be defined, I don't have a DOM element anywhere?
var that = ????
if(Abayo.validate(that)) {
Abayo.submit(that);
}
}
ReCaptchaコールバックでDOM要素を取得する方法はありますか?
プログラムでreCAPTCHAを作成できます。
まず、キャプチャdivを作成します。
<div id="myCaptcha" />
次に、キャプチャをレンダリングし、トークンを使用してデータを渡します。
var that = $(this);
grecaptcha.render('myCaptcha', {
sitekey: 'xxx',
callback: function(token) {
Abayo.submit(token, that)
}
});
詳細はこちら https://developers.google.com/recaptcha/docs/invisible#js_api
onSubmit
関数を次のように動的に設定してみましたか(div
タグをdata-callback="onSubmit"
と同じままにします):
$('#a23k4l234lj2l-submit-button').click(function (e) {
e.preventDefault();
var that = $(this);
if(Abayo.validate(that)) {
window.onSubmit = function(){ // defining onSubmit function dynamically here
Abayo.submit(that); // you can access `that` here
};
grecaptcha.execute();
}
})
注:このコードを確認するのに便利なサイトキーがありません。したがって、これは実際のコードサンプルではなくアプローチと見なしてください。