Motomichi Works Blog

モトミチワークスブログです。その日学習したことについて書いている日記みたいなものです。

input type="number" の挙動を少しだけ確認してみた

参考にさせていただいたページ

はじめに

  • iOSAndroidでは数字キーボードを表示させたい
  • フィールドに半角数字だけを入力させたい

という要望があり、2020年7月20日現在の挙動をあらためて確認しました。

type="number"にすると

2020年7月20日現在の挙動として、keydownイベントでざっと確認したところ以下の通りでした。

  • MacChromeで全角数字を入力して、確定したときに入力値が削除されました。このときevent.targer.valueには何もわたされません。
  • MacFirefoxで全角数字を入力して、確定したときに見た目上は全角数字が入力できました。このときevent.targer.valueにはには半角数字が渡されます。
  • MacFirefoxで半角数字012などを入力したときに0が削除されて12に変換されました。このときもevent.target.valueの型はstringです。

type="tel"にすると

  • iOSで表示されるキーボードにハイフンが無い

inputmode属性

試していませんが、特に解決はしなさそうな気がします。

結局どうしているか

参考までに結局のところどのような実装をしているかというと、

  • type="tel" でiOSAndroidのキーボードを数字にする(ハイフンなし)
  • event.target.valueに全角数字が渡されたら半角にし、数字以外の文字は削除してフィールドバリューに入れ直す

みたいなことをしています。