主にモバイルブラウザー用のWebアプリを構築しています。数値タイプの入力フィールドを使用しているため、(ほとんどの)モバイルブラウザーは数値キーボードのみを呼び出してユーザーエクスペリエンスを向上させます。このWebアプリは主に小数点ではなくカンマの領域で使用されるため、両方の小数点を処理する必要があります。
この混乱全体をドットとコンマでカバーする方法は?
私の発見:
デスクトップChrome
- 入力タイプ=数値
- ユーザーが入力フィールドに「4,55」を入力します
$("#my_input").val();
「455」を返します- 入力から正しい値を取得できません
デスクトップFirefox
- 入力タイプ=数値
- ユーザーが入力フィールドに「4,55」を入力します
$("#my_input").val();
「4,55」を返します- それは問題ありません。カンマをドットに置き換えて、正しい浮動小数点数を取得できます
Androidブラウザー
- 入力タイプ=数値
- ユーザーが入力フィールドに「4,55」を入力します
- 入力がフォーカスを失うと、値は「4」に切り捨てられます
- ユーザーを混乱させる
Windows Phone 8
- 入力タイプ=数値
- ユーザーが入力フィールドに「4,55」を入力します
$("#my_input").val();
「4,55」を返します- それは問題ありません。カンマをドットに置き換えて、正しい浮動小数点数を取得できます
ユーザーがコンマまたはドットを小数点記号として使用する可能性があり、より良いユーザーエクスペリエンスを提供するためにHTML入力タイプを数値として保持したい場合、このような状況での「ベストプラクティス」は何ですか?
キーイベントをバインドして、コンマを「オンザフライ」でドットに変換できますか。数値入力で機能しますか?
編集
現在のところ、解決策はありません。タイプが数値に設定されている入力から浮動小数点値(文字列または数値として)を取得する方法。エンドユーザーが「4,55」と入力すると、Chromeは常に「455」を返し、Firefoxは「4,55」を返します。
また、Android(テスト済み4.2エミュレーター)で、入力フィールドに「4,55」と入力してフォーカスを別の場所に変更すると、入力した数値が「4」に切り捨てられるのも非常に煩わしいです。
var number = $(...).get(0).valueAsNumber;
if (isNaN(number)) number = parseFloat($(...).val().replace(',', '.');
しかし、その解決策は、
.val()
。Androidは奇妙なことをします。システム言語を適切なものに設定したときに、それらが同じように動作するかどうかを確認できますか?