Invisible reCaptchaがキックインする前に1000hz bootstrap validatorを私のフォームに使用しています。そのためには、jQueryサブミットハンドラを使用する必要がありました。2回目の試行でのみハンドブックを実行する
問題は、送信ボタンが2回クリックされた後にのみ機能することです。最初のクリックでは、ハンドラをバイパスしてフォームが送信され、不可視のreCaptchaは実行されず、もちろんエラーが発生します。
これは形式です:
<form role="form" data-toggle="validator" data-disable="true" id="contactform" method="post" action="result.php">
<div class="form-group"><label for="InputName1">Envianos un E-mail</label><input type="text" class="form-control" name="nameofuser" placeholder="Nombre, Apellido" required>
</div>
<div class="form-group"><label for="InputEmail1">Email</label><input type="email" class="form-control" name="email" placeholder="Tu E-mail" required data-error="Porfavor, ingrese una dirección de Email valida.">
<div class="help-block with-errors"></div>
</div>
<div class="form-group"><label for="InputName1">Mensaje</label><textarea class="form-control" rows="5" name="comment" required></textarea>
</div>
<div id='recaptcha' class="g-recaptcha"
data-sitekey="6LfCKjQUAAAAAPSp2YVmv-Yv2sOIPW_gp6CLVBUj"
data-callback="onCompleted"
data-size="invisible">
</div>
<button type="submit" id="submit" style="font-size: 24px;" class="btn btn-box openSans" >Enviar</button>
</form>
そして、このJS:
$("#contactform").submit(function(e) {
$('#contactform').validator().on('submit', function (e) {
if (e.isDefaultPrevented()) {
// handle the invalid form...
console.log("FORM INVALIDO");
} else {
// everything looks good!
if (!grecaptcha.getResponse()) {
console.log('captcha not yet completed.');
event.preventDefault(); //prevent form submit
grecaptcha.execute();
} else {
console.log('form really submitted.');
}
}
})
});
onCompleted = function() {
console.log('captcha completed.');
$("#contactform").submit();
}
誰かがコンソールで見たい場合は、ここでの問題を表示するページです。 https://ccromatica.com/contacto
私はサブミット機能を削除しました。イベントハンドラは、最初のクリックで、少なくともコンソールに表示されるように機能します。フォームは2回目のクリック時にのみresult.phpに送信されます。 – Gaspar
最初と2回目のクリックでコンソールに何が表示されますか?検証に合格したと仮定すると、フォーム提出をブロックすべきものはありません。 'event'が定義されていないときは、' event.preventDefault(); 'があることに気付きます。 'e.preventDefault(); 'にする必要があります。 –
私はe.preventDefault()を修正しました。 最初のクリック時: captchaがまだ完了していません。 captchaが完了しました。 フォームが実際に送信されました。 2回目のクリックでちょうど: フォームが実際に送信されました。 したがって、ロジックは両方のクリックで動作するはずです。 – Gaspar