普段バッチ処理を書いていて、javascriptはほぼ初心者です。
・全角2Byte
・半角(カナを含む)1Byte
上記の計算で指定バイト数までの入力制限付きテキストボックスを作ろうとしています。
それでonkeyupに下記のコードを書いたのですが、
- 日本語入力中は指定バイト数を超えた時にバッファ上?の未確定文字列がキーを押すとちらちら出てくる
- 確定済みの文字列がある状態で、指定バイト数を超えて日本語入力を続けると確定済み文字列が消えることがある
上記の問題が出ています。
0.日本語入力中の場合、変換確定後のみsubstringを実行する(確定した文字列は消えない)
0.日本語入力中に指定バイト数を超えた場合はその時点で確定してそれ以上の入力をさせない
上記どちらかのような挙動にするにはどうしたらよいでしょうか?
※できればonkeydownイベントを使わずonkeyupイベントだけで完結させたいです(テストの兼ね合い)。
※とりあえずIEのみがサポートブラウザなのでIEで動けばいいです。
javascript
1function setOnKeyUpMaxByte(obj, maxByte) 2{ 3 var str = obj.value.toString(); 4 var len = str.length; 5 var cod = 0; 6 var bytLen = 0; 7 var cutFlg = 0; 8 9 for (i = 0; i < len; i++) { 10 11 bytLen += 2; 12 cod = str.charCodeAt(i); 13 14 // 半角文字(※半角カナ含む) 15 if ((0x20 <= cod && cod <= 0x7e) || (0xff61 <= cod && cod <= 0xff9f)) { 16 bytLen--; 17 } 18 19 if (bytLen > maxByte) { 20 obj.value = str.substring(0, i - 1); 21 break; 22 } 23 } 24}
追記
- 業務システムなのでFW外からの不特定多数のアクセスは考慮外とさせてください
- コピペ対策などは既にあって今回問題の発生した直接入力の改修が今回のタスクです
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/07/24 09:18