タイトルの件について解決策をお教えいただきたいと思い質問しました。
■状態
・maxlengthで入力最大値を指定する
・ひらがな入力モードにする
・テキストエリアに最大限まで文字を入力する
■おかしいこと
・文字列の途中から文字を入力すると、勝手に上書きされてしまう
・ちなみに半角入力モードではこのような現象は起きない
よろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答2件
0
ベストアンサー
状況を確認しました。
ちなみに、50 文字設定して、半角で、
0123457899
0123456789
0123456789
0123456789
012345
と50文字の制限を掛けたのに、46 文字しか入らないことは問題ではないのですね?
12345
12345
12345
123
このとき、太字にカーソル置いて、全角モードにした状態で、「あ」を1文字入力確定すると、
12345
12345
123あ5
123
として、半角4 が あ で上書きされてしまう。
確かに気持ち悪いですが、日本語入力用プログラムは、テキストエリアと密結合ではなく、os レベルで汎用的な作りであり、テキストエリアからは最大入力可能な文字数と、現在の文字数、現在のカラム位置を貰っている訳ではありません。日本語入力が確定したとき、テキストエリアのキー入力イベントに対して確定した文字列を送信する事で入力自体は完了し、後の処理はテキストエリアのキー入力処理にー委ねられます。
全角入力モードじゃない時は、最大文字数が入力されてるときはカーソルがどこにあってもこれ以上入力できません。半角入力状態のときは、テキストエリア自体が、カーソル位置や文字数などを自前で管理しつつ入力制御してるのではないかと思えます。
一方、最大文字数状態で、末尾以外で任意にカーソル置いて、全角入力を行い、確定時は半角になってるケースだとカーソル位置の文字が入力確定文字数分上書きされます。制限一杯のときに、入力された文字は上書きする、というロジックになってるのででょうね。半角入力モード時は、自前のキー入力制御のため、キー入力バッファに入力文字が溜まる事が無いが、全角入力モードの時は確定するまでテキストエリアの制御の外で入力が行われる。通常は、入力バッファに文字が確定する前に、文字数制限で、入力を無視するが、バッファに溜まってしまった物は入力確定されてしまったものなので捨てるわけにはいかない。ってことかと。
日本語入力プログラムがキー入力バッファにダイレクトに確定文字列を入力するスピードは人間の入力やリピートを凌駕します。
ついでに、いきなり出てきた「入力バッファ」ですが、キーリピートってありますよね?押しっぱなしにすると連続で入力される機能。あれを実現するために、半角入力状態で、入力バッファというのを持っています。通常人間操作では、リピートが働かない時間で1秒間にせいぜい20文字打つのがいいとこです。1文字入力、画面に反映までの時間が次の入力前に完了するため大抵の状況では、キー入力バッファは何時も空なんです。
このバッファが一杯になる、溢れるという状況もあり、それは、日本語入力確定時、キーリピートの最大スピード時、pcの他のプログラムの作業がcpuの利用率を占領した時、pc全体ニー高い負荷が掛かったときーなどに溢れる、場合があります。
テキストエリアは、バイト数ではなくて文字数で管理します。半角文字は、ASCII 文字は1バイトですが、全角文字は1文字最低2バイト以上です。
キー入力機能は、ベースとなる文字コードがどの体系の文字コードベースなのかは確認できません。
sjis,windows31j,ms932 などは、半角1バイト、全角2バイト、
utf-8 は、1-6バイト、
utf16 は、1文字2 or 4 バイト、
一杯書いたけど、上書きされる件は想像の域を出ません。
とりあえず、バグではないと思いますよ。
投稿2016/02/19 05:54
総合スコア1693
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/02/26 07:53