2024/01/22 15:24
iOS Safari向けのinputやtextareaを実装するときにmaxlengthが効かない問題のメモ
maxlength
- 古いiOS Safariでは効かない模様
- iOS 18.6.2のSafari 18.6では効いていることを確認
onInput()
でstring.slice(0, maxlength)
するとIMEの挙動が可笑しくなるtype="tel"
など日本語が入力できない場合であれば有効
- オートコンプリートやコピペ入力での字切れなどもあるため、根本的に使わないことが望ましい
type="number"
- iOS Safariでは期待した動作にはならない
- IMEが有効になり、全角入力が発生する
- iOS 18.6.2, Safari 18.6でも挙動は変わらず
- 使うなら
type="tel"
を使い、JSで数字以外の入力を弾くのが無難 - 恐らく普及ブラウザの全てで半角入力を強制出来、スマホなどではNumPadが出てくる
- アルファベットやハイフンなどの記号も打てるので必要に応じた入力制御が必要
あとがき
iOS SafariのバージョンはiOS側に一定の依存があるらしく調べるのが手間だった。とりあえずUserAgentから抜いた値で確認している。
参考
"maxlength" | Can I use... Support tables for HTML5, CSS3, etc