前提
javascript (jQuery)で、数値の入力途中の段階で、
入力桁数に応じて3桁カンマを付与する処理を実装しています。
Edgeの<かなモード>(画面右下のIMEが「あ」と表示)で、
キーボートのテンキーで「10000」(1を1回、0を4回 )を入力すると、
javascript の inputイベントが 6回発生します。
下記のソースの実行結果で、コンソールに
「hoge」と「setNumberFormat」が6回出力されます。
その結果、画面には「110,000」と表示されてしまいます。
(1を2回、0を4回入力したと誤認識されている )
Edgeの<半角英数モード>(画面右下のIMEが「A」と表示)では、
正常に「10,000」と表示されます。
(「hoge」と「setNumberFormat」が5回出力されます。)
また、IEの<かなモード>(画面右下のIMEが「A」と表示)でも、
正常に「10,000」と表示されます。
(「hoge」と「setNumberFormat」が5回出力されます。)
知りたいこと
「解消方法」ではなく、「原因」が知りたいです。
なぜ、5回の入力に対し、6回のinputイベントが発生するのでしょうか?
(Edgeの<かなモード>の仕様でしょうか?)
### 該当のソースコード //入力値のチェックとカンマ区切り処理 $("#inputVal input").on("input", function(evt){ var src_str = $(this).val(); var re = /[^0-9,]/g; var matches_array = src_str.match(re); if(matches_array != null && matches_array.length > 0){ console.log("foo"); $(this).val(old_input); }else{//半角数値のみ入力受付る console.log("hoge"); var ret_str = setNumberFormat(src_str); $(this).val(ret_str); old_input = ret_str; } }); //数値文字列を3桁ごとにカンマで区切る function setNumberFormat(numstr) { console.log("setNumberFormat"); if(numstr != ""){ var tmp_str = numstr.replace(/,/g, "");//カンマ除去 var tmp_num = Number(tmp_str);//一旦数値に変換して文頭の0を除去 var res = new String(tmp_num); while(res != (res = res.replace(/^(-?\d+)(\d{3})/, "$1,$2"))); }else{ res = numstr; } return res; }
あなたの回答
tips
プレビュー