0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

reCAPTCHAの送信ボタンにdisabledが設定できない

Posted at

はじめに

GoogleのreCAPTCHA(v3)の送信ボタンにdisabled属性を設定しても反映されない症状がありました。ドキュメントを調べても回答を見つけられなかったので、動作検証した結果でお話します。

症状

reCAPTCHAのドキュメントに記載されているbuttonタグにdisalbed属性を追加しても、ボタンは押せる状態になっていました。
ブラウザのディベロッパーツールでbuttonタグを確認すると、設定したはずのdisabled属性が消えていました。

<button class="g-recaptcha" 
        data-sitekey="reCAPTCHA_site_key" 
        data-callback='onSubmit' 
        data-action='submit' disabled>Submit</button>

検証

buttonタグの「class="g-recaptcha"」を削除すると、disabled属性は消されずに反映されました。

原因

Googleから提供されているJavascriptが「class="g-recaptcha"」のボタンに対して、何か変更を加えている可能性が高いです。
さらに挙動を見ていると、ボタンを押した一瞬だけdisabled属性が自動で設定されるようです。(ボタン連打の対策だと思います)

解決策

今回、buttonタグにdisabled属性を設定する仕様を諦めました。
必要な項目を入力するまで、送信ボタンを押せないようにしたかったのですが、ボタンを押した時に未入力の項目があれば、alert()でダイアログを表示する仕様に変更しました。

おわりに

今回は未検証ですが、ドキュメントにあるgrecaptcha.execute()を使う実装にすると、送信ボタンにdisabled属性を設定できる可能性があります。
また、時間のあるときに検証してみます。

<!-- 未検証:参考まで -->
<button type="submit" onclick="onClick();" disabled>Submit</button>
<script type="text/javascript">
      function onClick(e) {
        e.preventDefault();
        grecaptcha.ready(function() {
          grecaptcha.execute('reCAPTCHA_site_key', {action: 'submit'}).then(function(token) {
              // Add your logic to submit to your backend server here.
          });
        });
      }
</script>
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?