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

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

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

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

Windows 7

Microsoft Windows 7は過去にリリースされたMicrosoft WindowsのOSであり、Windows8の1代前です。2009年の7月にリリースされ販売されました。Windows7の前はWindowsVistaで、その更に3年前にリリースされました。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Struts

StrutsはJava向けのWebアプリケーションフレームです。MVCモデルに基づいており、JSPやJavaサーブレットを組み合わせ、アプリケーション構築時に使用する各機能を提供しています。

HTML

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

Q&A

解決済

2回答

11531閲覧

Java html:text , html:textarea の入力文字数制限(バイト数)について

Alice0225

総合スコア206

JSP

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

Windows 7

Microsoft Windows 7は過去にリリースされたMicrosoft WindowsのOSであり、Windows8の1代前です。2009年の7月にリリースされ販売されました。Windows7の前はWindowsVistaで、その更に3年前にリリースされました。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Struts

StrutsはJava向けのWebアプリケーションフレームです。MVCモデルに基づいており、JSPやJavaサーブレットを組み合わせ、アプリケーション構築時に使用する各機能を提供しています。

HTML

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

0グッド

0クリップ

投稿2016/10/28 07:52

編集2016/10/31 00:15

現在、既存のWebアプリ改修を行っています。

HTML

1<html:textarea property="riyousya" styleClass="widthauto" rows="1" style="overflow:hidden;" /> 2<html:text property="kaisu" styleClass="widthauto" />

上記のようなテキストを入力する箇所がいくつかあるのですが、

現仕様
JavaScriptを使用して、各入力エリア上部に現在何文字何行入力されているか表示(文字はバイト数)
(例)200文字/10行
Formにて保持している最大文字数or最大行数を超えているとカウント文字が赤くなり、許容文字・行数を超えていることを知らせる。

要望
別のWebページでも入力文字のカウントを入れようか、という話になったのですが
ある特定のページにおいて入力項目が30~40ある為、一つ一つ文字数表示を入れると
ただでさえ見づらいページが余計に見づらくなってしまうので、最大文字数を超えた場合に入力出来ないようにすることは可能か。
(例)最大バイト数:10 既入力値:「あああああ」 の場合、追加入力しようとしても入力が受け付けられず、「あああああ」から変わらないようにする(BackSpace等の削除は有効にしたい)

上記要望を満たすため、わからないなりに調べたのですが
maxlength="XXX" では半角全角関係なく5文字までしか入力出来ない
onChange、onKeyPressイベントなどでは入力された後に判定する為要望と異なってしまう
と、解決に至れていない状況です。

上記要望を満たすことは可能なのでしょうか。
皆様のお知恵を拝借できますと幸いです。

【2016/10/28 17:20追記】
バイト数はMS932基準になります。

【2016/10/31 09:15追記】
使用するブラウザはIE11になります。

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

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

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

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

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

KSwordOfHaste

2016/10/28 08:10

どのようなエンコーディングにおけるバイト数か明確に述べるべきと思います。例えばMS932で変換した結果のバイト数とか・・・
Alice0225

2016/10/28 08:21

>>KSwordOfHasteさん 追記させていただきました。
guest

回答2

0

  1. 制限以上のバイト数となるような文字入力を無視

Javaであれば可能ですが、HTMLでのTEXTやTEXTAREAで「キーがコントロール上に反映されるまえにハンドリングすることで入力文字を無視すること」は不可能に思えるので、次善策としてキー入力があるたびにもし制限を超えた長さになっていたら文字列の最後尾を切り捨てるといった仕様にすれば可能だと思います。keydownイベントはブラウザにより動作の違いがあるようなので半角・全角・IMEによる入力の全てでイベントが発生するブラウザが前提になると思います。スミマセンが前提のブラウザがどういうものになるかは詳しくないのでコメントできません。

  1. MS932のバイト数

検索するとMS932で変換するライブラリーがあるようです。下記のサイトにリンク先がありました・・・
javascriptで文字コード変換

投稿2016/10/28 09:09

KSwordOfHaste

総合スコア18394

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

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

Alice0225

2016/11/02 03:16

ご回答ありがとうございます。 keydown,keyupイベントによる、「入力後に文字数が最大数を超えていた場合に超えた分を削除」という方法は私自身も提案として実装したのですが、「それだとダメ」と言われてしまいました。。。 バイト数算出は既に実装されているので大丈夫そうです。
KSwordOfHaste

2016/11/02 07:00

むー。入力自体を阻止せよということですか。TEXT一つ一つに対して直前の値をJavaScriptデータとして覚えておき、TEXTの内容が変化した際に制限長を超えていたら元の値に戻すとやればできるのでしょうが・・・他によい方法があるのでしょうか。 上のように実現したとすると字数オーバー時に入力中のカーソルの位置が先頭に戻ってしまうのでコントロールの一般的な振る舞いから考えて不自然な動きになってしまいます。そのあたりが許容できるならこの手もあるかもしれません。そのあたりユーザさんによく理解していただいた上で動作を考えないと後で苦労しそう・・・ 個人的には制限を超えていたら背景色を変更しsubmitボタンを無効化といった方が自然に感じます。それはそれで実装が面倒そうですが・・・
guest

0

ベストアンサー

Blobオブジェクトが使える環境に限定できるなら
new Blob([str]).sizeを参照すればよさそうです。
またonChange、onKeyPressとのことですが
最近のモダンブラウザならonInputイベントが使えます

#sample

HTML

1<script> 2document.addEventListener('input',function(e){ 3 if(e.target.nodeName=="TEXTAREA"){ 4 var v=e.target.value; 5 var b=new Blob([v]); 6 console.log(b.size) 7 } 8}); 9</script> 10<textarea> 11</textarea> 12

#sample2
細かい条件設定が面倒なのでjQueryでやった場合の最大10バイトまで入力可能なtextareaです
ただしUTF8でやると1文字=3バイトなので「あああああ」ではなく「あああ」で切れてしまいます

HTML

1<script> 2$(function(){ 3 var maxbytes=10; 4 $('textarea') 5 .on('input',function(e){ 6 if(new Blob([$(this).val()]).size<=maxbytes){ 7 $(this).data('val',$(this).val()); 8 }else{ 9 $(this).val($(this).data('val')); 10 } 11 }); 12}); 13</script> 14<textarea> 15</textarea> 16

投稿2016/10/28 08:59

編集2016/11/02 04:52
yambejp

総合スコア114784

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

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

Alice0225

2016/11/02 03:18

ご回答ありがとうございます。 Blobオブジェクトというものは初めて聞きました。 使用できそうなものであるか調べてみたいと思います。 onInputイベントにつきましては今回使用想定のブラウザがIEである為、使用不可でした。
yambejp

2016/11/02 03:31

IEでも動くと思いますけど・・・ 古いIEですかね?
Alice0225

2016/11/02 03:34

勘違いをしておりました。 IE9以降であれば対応しているのですね。 ご提示頂いたコードと併せて再度検証してまいります。
yambejp

2016/11/02 04:52

一応文字数制限のサンプルも上げておきます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問