株式会社オートプロジェクト

iOSで数値を入力すると値が重複する不具合の解決法

iOSで数値を入力すると値が重複する不具合の解決法

入力フォームで発生した不具合

Reactで郵便番号の入力フォームを実装した際、iOS(Safari)+日本語キーボード(かな)で入力すると、数値が重複して表示される不具合が発生しました。

入力 表示
4 4
46 446
466 446666

原因

iOSの日本語IMEとinputのvalue再代入が衝突していた可能性があります。

日本語IMEとは、簡単に言うと日本語の仮想キーボードです。日本語IMEは、「未確定(composition)」と「確定」があり、それが入力イベントと競合する場合があります。

そして、handleChange関数で数値のみをvalueへ再代入する処理を行っていました。

const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
 const digitsOnly = e.target.value.replace(/\D/g, "");

 onChange({
  target: {
   name: "pastalcode",
   value: digitsOnly,
  }
 } as React.ChangeEvent<HTMLInputElement>);
};

<TextField
 name="pastalcode"
 value={pastalcode}
 onChange={handleChange}
/>

日本語IMEがONの状態で数値を入力valueの再代入が衝突したため、今回の不具合が起こった可能性が高いです。

解決策

Reactの場合

<TextField
 name="pastalcode"
 value={pastalcode}
 onChange={handleChange}
 slotProps={{
  htmlInput: {
   inputMode: "numeric" // numericモードにする
  }
 }}
/>

HTMLの場合

<input type="text" inputmode="numeric" />

inputmode=”numeric”にすることで、数値入力向けの仮想キーボードが表示されるように誘導しました。

Webデザイナー / コーダーのみなさまへ

株式会社オートプロジェクトでは、バックエンド全般を安心してお任せいただけます。

サーバー設定やDB管理、セキュリティ対策など幅広いニーズに対応いたします。お気軽にご相談ください。

バックエンドについて、オートプロジェクトに問い合わせをする

Contact ご相談・お問い合わせ

実現の可否や概算費用、納期に関するご質問・ご相談も、
どうぞご遠慮なくお問い合わせください。

お問い合わせ ご相談・お問い合わせ
TOP