HTMLでフォームのオートコンプリートを無効にする方法

HTMLでフォームのオートコンプリートを無効にする方法

HTML でフォーム等を作成する際にオートコンプリートを無効にしてしまいたいケースがありますが、

<form autocomplete="off">...</form>

とするだけでは制御が効かないケースが出てきました。

今回は name 属性をランダムにしたりしない方法でできるだけオートコンプリートを抑制してみようと思います。

フォームの自動補完を無効にするには

aria-autocomplete を指定する

https://developer.mozilla.org/ja/docs/Web/Accessibility/ARIA/Attributes/aria-autocomplete

aria-autocomplete にインターフェイスで表示されるように"both"を指定します。

<form autocomplete="off" aria-autocomplete="both">...</form>

aria-haspopup を指定する

https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-haspopup

スクリーンリーダー及びブラウザの挙動を明示的に制御します。

<form autocomplete="off" aria-autocomplete="both" aria-haspopup="false">
  ...
</form>

autocorrect を指定する(Safari のみ)

Safari 等のブラウザでは入力の自動補完が動作してしまう可能性があるので autocorrect を指定しておきます。

<form
  autocomplete="off"
  aria-autocomplete="both"
  aria-haspopup="false"
  autocorrect="off"
>
  ...
</form>

autocapitalize を指定する

https://developer.mozilla.org/ja/docs/Web/HTML/Global_attributes/autocapitalize

先頭の文字が大文字になったりするのを防ぐ為に autocapitalize を無効にして制御しておきます。

<form
  autocomplete="off"
  aria-autocomplete="both"
  aria-haspopup="false"
  autocorrect="off"
  autocapitalize="off"
>
  ...
</form>

おわりに

ブラウザの自動入力の設定を行っている場合などはそれでも form 要素だけでは制限しきれませんが、オートコンプリートを手軽に無効にするのであればこれで概ね制御できるかと思います。

フォーム内の要素数が少ない場合などは

<input type="text" name="hogehogemanju" />

というようにして name 内をフォーム表示の都度ランダムな文字列にしてしまうほうが確実でしょう。