質問編集履歴

1 未記載情報の追加

kutsulog

kutsulog score 963

2015/07/24 18:11  投稿

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

    35792 questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る