WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:バイト数で入力制限をしたい

0:[投稿] ゆかり [MAIL] [2005/05/13 11:05 ][環境:IE6 win2000 Apache]

こんにちは。よろしくお願いいたします。
javascriptを使っています。

第一希望は、htmlの「maxlength」のように入力中にバイト数がオーバーしたら入力できないような方法を知りたいです。
探したのですが、見つからないのでjavascriptでチェックしようしたのですがエラーが出て上手くいきません。
一部抜粋ですが、ソースを書きますのでご指摘お願いいたします。

<script language="JavaScript"  type="text/javascript">
function mojichoCheck(moji_name,limit_text){
moji = document.myForm.moji_name.value;
change_flg = "1";
hankaku = "";
mojicho = moji.length;
han ="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ!\"#$%&\'()=~|\\,./;:@[]<>?_+*}`{\n\t ";

  if("あ".length == 1){
    while(moji != null){
      hankaku = moji.substring(0,1).toUpperCase();
      moji = moji.substring(1,moji.length);
      if(han.indexOf(hankaku) < 0){ ++mojicho; }
    }
   }
  if(mojicho > limit_text){
    alert("文字数が制限を越えています");
  }
  return false;
}
</script>
<body>〜抜粋
<td nowrap><input type="text" name="self_code" class="text_70" maxlength=10
value="<%=(String)Data.get("SELF_CD")%>" onChange="mojichoCheck'self_code','10');">
</td>

textは他にもあるので引数にtextのnameと制限をかけたいバイト数を入れています。
textの値は別のjavaファイルでSQLを呼び出してDBより取得してきています。
これを実行すると「document.myForm.moji_name.value」がnullまたはオブジェクトではありません。とエラーになります。

他のページでは普通に「maxlength」で制限をかけているので同じ感じで制限をかけたいのですが、難しいでしょうか。
よろしくお願いいたします。


1:[回答] を [2005/05/13 13:36 ]

document.all(moji_name).value に変更してみてください

あと、onChange="mojichoCheck'self_code','10')は
onChange="mojichoCheck('self_code','10')ですよね
記入ミスならすみません。

それから、onChangeはフォームからフォーカスが外れるときに発生するイベントのハンドラで、入力中にmaxlengthのように制限をかけることはできないと思います。


2:[質問] ゆかり [2005/05/13 14:19 ]

ご回答ありがとうございます。試させていただきました。

onChange="mojichoCheck'self_code','10') は記入ミスです。すみません。
実際は onChange="mojichoCheck('self_code','10') と書いてあります。

同じくエラーが出るので確認のため、ファンクションを
function mojichoCheck(moji_name,limit_text){
    moji = document.all(moji_name).value ;
    alert(moji);
    return false;
}
に変えてみたところ、「undefined」というエラーが出ました。
やはり値が取れていないみたいなのですが、原因がわかりません。
DBから取得した値に直接変更を加える時にはhtmlの方の記入を変えないといけないということでしょうか。。。

それと書き方が悪かったのですが、「maxlength」と同じような制限についてはhtmlやスタイルシート等で探しました。
イベントが起こる前に制限したかったので・・・文字数の制限しかできないのでしょうか。
よろしくお願いいたします。


3:[回答] を [2005/05/13 15:23 ]

undefinedに関しては、まずDBから値が正常に取得できたか確認してみてください。
document.all(moji_name).valueはあくまでテキストボックスの値を取得するものです。
DBから取得したデータは必ずテキストボックスに反映させてください。
※しかしこの場合、取得したデータはすでに文字列になっているはずですので、制限文字数を超えている可能性があります。
DBに登録するときや、JAVAでデータを取得したときに文字制限を加えることをしなければならないかもしれません・・・

maxlengthは文字数を制限しますが、バイト数は制限できなかったと思います。
テキストボックスにキーボードで入力するときはonKeypressハンドラでバイト数チェックをできるのですが・・・


4:[質問] ゆかり [2005/05/13 17:20 ]

度々ありがとうございます。

DB値はまず検索を行ってますのでテキストフィールドに反映されています。
今のところはテストの段階ですので制限文字数は超えていません。
DB更新の際にもチェックをかける予定ですのでDBには正しいデータが入っている想定です。
とりあえず反映されているデータの後ろに制限を越える文字数を入れてテストしているのですが、値が取れていないようなのです。

onKeypressハンドラについても調べてみます。
これだと入力中に警告を出せそうなので希望に近いものができるかもしれません。
ありがとうございます!


5:[回答] AC1号 [2005/05/16 00:30 ]

要素自身の情報を関数に渡せばよいのだから、thisを使えば良いでしょう。
function mojichoCheck(obj){
 moji = obj.value;
 limit_text = obj.maxLength;
 ...
}
<input onchange="mojichoCheck(this)" maxlength="10">

もし名前を使う必要があれば、適当なid属性をつけてgetElementById()使う(all()はIEの独自拡張なので使わない)。


6:[完了] ゆかり [2005/05/16 10:38 ]

AC1号様、ありがとうございます。
上記のやり方で上手くできました。

を様もありがとうございました。
onKeypressについても考えてみてどちらがいいか考えてみます。

本当にありがとうございました。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World