質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

5620閲覧

jspのテキストエリアにmaxlength属性を指定した時、入力操作がおかしくなる

kobahito

総合スコア87

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2016/02/19 04:09

タイトルの件について解決策をお教えいただきたいと思い質問しました。

■状態
・maxlengthで入力最大値を指定する
・ひらがな入力モードにする
・テキストエリアに最大限まで文字を入力する
■おかしいこと
・文字列の途中から文字を入力すると、勝手に上書きされてしまう
・ちなみに半角入力モードではこのような現象は起きない

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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

ipadcaron

総合スコア1693

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kobahito

2016/02/26 07:53

回答ありがとうございます。m()m maxlengthを使用する場合こうなってしまうんですね。 ありがとうございました。
guest

0

解決の必要がなくなりました。
お騒がせしました。

投稿2016/02/19 05:47

kobahito

総合スコア87

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問