テーマを変更中で、表示が崩れているところがあります…!

【bubble】iPhone Safariで数字入力がおかしい

.bubble
.bubble

とあるシステム開発のスマホ確認中に発覚したできごと。今までレスポンシブがほとんどなかったので気づかなかったけど、これは結構痛いなと思ったので、メモ。

結論から言うと

iPhone Safariでは input エレメントの Text(numbers only)が使えない。

では再現。

まず適当にinputを配置します。
Content formatを「Text(numbers only)」にします。

iPhone Safariでは input エレメントの Text(numbers only)が使えない
Input Text (numbers only)

こちらをiPhone Safariで表示します。

Safariでの表示1
Safariでの表示1

適当に数字を入力して、、、

Safariでの表示2
入力しようとすると数字キーボード
Safariでの表示3
数字を入力して・・・

「完了」をタップ。

Safariでの表示4
タップしたあと

!?

消えた…

ちなみに、Webインスペクタで見るとこうなっています。

Webインスペクタ
input の内容

うーん、patternじゃないとすると inputmode が怪しい。と思って検索。

ブラウザ互換性

あっ。Safari対象外でした…。

inputmode

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

ということで、先頭が0でない数字であれば integer を使うか、正規表現でチェックをするようにしましょう。

よく使う半角数字チェック

よく使う半角数字のチェック方法をご紹介。

要素は input 、Content formatを Text に設定。

validationチェック用にCustom Stateをセット。デフォルト値はyes(チェックOK)の状態にします。

半角数字の正規表現チェック 1
半角数字の正規表現チェック 1

ワークフローのトリガーを an input’s value is changed とします。

それぞれ、内容をチェックして半角数字以外が入力されている場合、Custom Stateの値をnoに設定します。
このとき、半角数字のみの場合 yes にする設定もお忘れなく。忘れるとユーザーが内容を修正しても no のままになってたりするので…。

Custom stateをnoにする設定

上記は、入力値を正規表現でチェック( [0-9]+ → 0〜9の繰り返し)をし、チェックした値が入力値と同じでない場合はnoにしています。

正規表現でチェックした場合、結果が配列に入るので、今回は半角数字の羅列のチェックなので first item で取得しています。

半角数字かどうかのチェックなので、convert to number = this input’s value でも大丈夫そうですね。書き方は必要なチェック形式と好きな書き方に合わせてもらえればと。

Custom stateをyesにする設定

yesにする設定も、正規表現部分は同じ。

これで半角数字のチェックはOKです。

あとは、Conditional で input’s valid = no のときに入力欄を赤枠にしたり、メッセージを出したり、保存ボタンを押せなくしたり、必要に応じた設定をしてください。

正規表現チェックでエラー時に赤枠にする
正規表現チェックでエラー時に赤枠にする

結果

結果はこんな感じです。

入力欄
半角数字の入力結果

ちゃんと入力されますね!

キーボードを数字キーボードにしたいですが、ひとまず入力できない問題は解決。

なお、エラー時はこんな感じ。

正規表現での半角数字チェック(エラー)
タイトルとURLをコピーしました