• ベストアンサー

テキストエリア文字制限について

テキストエリア文字制限について 失礼します。 javascript初心者です。 複数のテキストエリアの文字制限を行いたく 苦戦しております。 いろいろと検索してみましたが・・・ 2日ほど悩んでおります。 AとBでエラーが出た場合はCGIに流れず入力フォームに戻るのですが Bでエラーが発生しない場合CGIに流れてしまいます。 ですの文字数制限をしても結局CGIに流れてしまうのですが どのように記述すればよろしいでしょうか?? なんとか・・・ご教授いただければ幸いです。 よろしくお願いいたします。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <meta http-equiv="Content-Style-Type" content="text/css"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <title>入力文字数の制限</title> <script language="javascript" type="text/javascript"> <!-- var MAXLENGTH = 10; //入力許容最大文字数 function tareachk(frm){ var tmp = frm.vin1.value; var len = tmp.length; if(len > MAXLENGTH){alert("A入力可能な文字数は"+MAXLENGTH+"文字までです");} var tmp = frm.vin2.value; var len = tmp.length; if(len > MAXLENGTH){alert("B入力可能な文字数は"+MAXLENGTH+"文字までです");} else{frm.submit();} } // --> </script> </head> <body> <form action="ccccc.cgi" method="post"> <textarea name="vin1" rows="5" cols="30">10文字まで入力可能</textarea><br> <textarea name="vin2" rows="5" cols="30">10文字まで入力可能</textarea><br> <input type="button" value="GO" onclick="tareachk(this.form);"> </form> </body> </html>

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

>Bでエラーが発生しない場合CGIに流れてしまいます。 そのようにプログラムされています。 分解すると以下のようになっています。 if(len > MAXLENGTH){   alert("A入力可能な文字数は"+MAXLENGTH+"文字までです"); } if(len > MAXLENGTH){   alert("B入力可能な文字数は"+MAXLENGTH+"文字までです"); } else {   frm.submit(); } 次のように修正してみてください。 if(len > MAXLENGTH){   alert("A入力可能な文字数は"+MAXLENGTH+"文字までです");   return; //★ここで処理を打ち切る } if(len > MAXLENGTH){   alert("B入力可能な文字数は"+MAXLENGTH+"文字までです");   return; //★ここで処理を打ち切る } //★A、Bのチェックが通った場合だけ、ここに到達する。 frm.submit();

2525web
質問者

お礼

ありがとうございます!! >return; //★ここで処理を打ち切る ですか・・ んあるほど勉強になります。 先ほどためさせていただきましたが成功しました。 私の書き方であってるのかどうかわかりませんがおかげさまで勉強になりました。 <script language="javascript" type="text/javascript"> <!-- var MAXLENGTH = 10; //入力許容最大文字数 function tareachk(frm){ var tmp = frm.vin1.value; var len = tmp.length; if(len > MAXLENGTH){   alert("A入力可能な文字数は"+MAXLENGTH+"文字までです");   return; //★ここで処理を打ち切る } var tmp = frm.vin2.value; var len = tmp.length; if(len > MAXLENGTH){   alert("B入力可能な文字数は"+MAXLENGTH+"文字までです");   return; //★ここで処理を打ち切る } //★A、Bのチェックが通った場合だけ、ここに到達する。 frm.submit(); } // --> </script>

その他の回答 (2)

  • chara0-m
  • ベストアンサー率50% (3/6)
回答No.3

ソースを拝見させていただいた感じですと、同じ変数を使うということをしておられますが、あまりいい記述の仕方ではありません。 できれば、違う変数名を使い var tmp1 = frm.vin1.value; var len1 = tmp1.length; var tmp2 = frm.vin2.value; var len2 = tmp2.length; この様な感じにして別々の変数に値を入れ、それを評価するといった感じの方がいいかなと思います。 評価の部分も、 if(len > MAXLENGTH ){ alert("A入力可能な文字数は"+MAXLENGTH+"文字までです"); } else if( len2 > MAXLENGTH ){ alert("B入力可能な文字数は"+MAXLENGTH+"文字までです"); }else{ frm.submit(); } Aを評価して、問題なければBを評価するそれも問題なければ、送信処理をすると言った感じにすれば問題なく動作すると思います。

2525web
質問者

お礼

ありがとうございます。 書き方がまずかってですか>< うむむ。。。 再度勉強しなおしてみます。 ありがとうございます。 皆さんにご回答いただいて大変勉強になりました。 こちらも後程ためさせていただきます。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

現在のコードだと  if(Aでエラー){Aアラート表示}  if(Bでエラー){Bアラート表示}else{サブミット} という流れになっていますので、Aでのエラーはアラートを表示するかしないかにだけ関っていて、サブミットには関係ないことになってしまっています。 BのチェックをAがエラーでないときに実行するようにして、  if(Aでエラー){Aアラート表示}  else {  if(Bでエラー){Bアラート表示}else{サブミット}  } または、単純に  if(Aでエラー){Aアラート表示}  if(Bでエラー){Bアラート表示} if (!Aのエラー)&&(!Bのエラー){サブミット} あるいは、まとめてチェックして  mes=""; //チェックメッセージ用  if(Aでエラー){mes=" A";}  if(Bでエラー){mes+=" B";}  if (mes) {alert(mes + "の入力可能文字は~~");} else{サブミット} とか…やりかたは、いろいろあると思うけど。

2525web
質問者

お礼

ありがとうございます。 なるほどいろいろな書き方が・・・あるんですね。 参考になります。 私にはまだ難しいようなので今後のためにも参考にさせていただきます!。 本当にありがとうございます。

関連するQ&A

  • 入力文字数のチェック

    CGIを利用して、入力されたコードからある項目を検索させるページを作っています。 入力させる文字は数字8桁に制限したいのですが、下記の内容ですと、8桁以下の入力でエラーを出すことはできますがそのままCGIの処理に流れていってしまうのです。 これを、8桁以下だったらエラーを出してそこでストップさせるようにしたいのです。 かれこれ3日悩んでいます。。。よろしくお願いいたします。 ========================================================= <HTML> <HEAD> <TITLE>データベース</TITLE> <script language="javascript" type="text/javascript"> <!-- var MAXLENGTH = 8; //入力許容最小文字数 function tareachk(frm){ var tmp = frm.HANDLE.value; var len = tmp.length; if(len < MAXLENGTH){alert("現在のコードの"+MAXLENGTH+"桁を入力してください");} else {frm.submit();} } // --> </script> </HEAD> <BODY bgcolor="#ffffff"> <img SRC="logon_l2.gif" height=42 width=685> <br> <form method=post action="/cgi-bin/search.cgi"> コード <input type=text name="HANDLE" size="10"> <input type=submit value="検索" onClick="tareachk(this.form);"> </form> </BODY> </HTML>

  • テキストエリアの制限字数以上の文字を消したい

    いつもお世話になっております。 現在、JavaScriput勉強中の初心者です。 テキストエリアにJavaScriptでmaxlength機能を付け制限字数を超えると警告ダイアログを出す ようにしたのですがコピペで制限字数を2文字以上超えるとBackSpaceで1文字消すたびに 警告ダイアログが出るというバグが起きてしまいます。 そこで警告ダイアログのOKボタンを押すと制限字数以上の文字は消すプログラムが組みたい のですがどうすればよいですか? あと残り入力可能文字カウンタをsetIntervalを使ったものに変更したら警告ダイアログすら表示 されなくなってしまいました・・・よろしくお願いします。 ●変更前 <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>文字のカウント</title>   <script type="text/javascript"><!--     function ShowLength( str ) {       document.getElementById("inputlength").innerHTML = 20 - str.length;     }     function check() {       txt = document.myFORM.myTEXT.value;       n = txt.length;       if (n > 20) alert("20文字以内にしてください");     }     // --></script> </head> <body> <form name="myFORM"> <textarea cols="46" rows="5" name="myTEXT" onkeyup="ShowLength(value); check();" onmouseout="ShowLength(value); check();"></textarea><br /> あと<span id="inputlength">20</span>文字入力できます<br /> </form> </body> ●変更後 <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>文字のカウント</title>   <script type="text/javascript"><!--     (function(){       var intervalId = setInterval(function(){        var n = 20 - document.getElementsByName("myTEXT")[0].value.length;        if(n < 0) n = 0;        document.getElementById("inputlength").innerHTML = n;       }, 100);     })();     function check() {       txt = document.myFORM.myTEXT.value;       i = txt.length;       if (i > 20) alert("20文字以内にしてください");     }     // --></script> </head> <body> <form name="myFORM"> <textarea cols="46" rows="5" name="myTEXT" onkeyup="ShowLength(value); check();" onmouseout="ShowLength(value); check();"></textarea><br /> あと<span id="inputlength">20</span>文字入力できます<br /> </form> </body>

  • textareaで入力できる文字数を制限したい。

    フォームについて質問させてください。 テキストフィールドで、シングルラインならば入力できる文字の最大数を maxlength で指定できるのですが、マルチラインの場合、同様に最大数を指定することはできないでしょうか? わかるかた、なにとぞご教授ください。 ■シングルラインでの文字数制限 <input name="thread_title" type="text" id="thread_title" size="80" maxlength="10"> ■マルチライン <textarea name="text" cols="64" rows="10" id="news_text" maxlength="10"></textarea> ↑上記のようにmaxlength入れても駄目でした。。。涙

    • ベストアンサー
    • HTML
  • Javascriptで複数のテキストエリアの文字列を連結させたいです

    Javascriptで複数のテキストエリアの文字列を連結させたいです。 初めまして、 お世話になります。 ------------------------------------------------- <html> <head> <title>無題ドキュメント</title> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> </head> <body bgcolor="#FFFFFF" text="#000000"> <form name="form1" method="post" action=""> いつ<br> <textarea name="when"></textarea> <br> <br> どこで<br> <textarea name="where"></textarea> <br> <br> だれが<br> <textarea name="who"></textarea> <br> <br> どうした<br> <textarea name="what"></textarea> <br> <input type="submit" name="submit" value="連結"> <input type="reset" name="submit" value="リセット"> <br> <br> いつどこでだれががどうした。<br> <textarea name="textfield"></textarea> </form> </body> </html> ------------------------------------------------- というHTMLがあったとして ボタンを押したら文字列を連結させたいのです。 その際、入力したテキストフィールドで文字列が改行をされてあった場合 それをそのまま反映して表示させたいのです。 ぜひよろしくお願いします。

  • プルダウンを必須入力にする機能を付け足したい

    テキストボックスなどを必須入力にする以下のコードに プルダウンを必須入力にする機能を付け足したいのですが、 うまくいきません… どなたかご教授いただけませんでしょうか。 よろしくお願いいたします。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー <script type="text/javascript"> function chkHissu(frm){ var hissu=Array("test1","test2"); var hissu_nm = Array("テスト1","テスト2"); var len=hissu.length; for(i=0; i<len; i++){ var obj=frm.elements[hissu[i]]; if(obj.type=="text" || obj.type=="textarea" ){ if(obj.value==""){ alert(hissu_nm[i]+"は必須入力項目です"); frm.elements[hissu[i]].focus(); return false; } } } return true; } </script> ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー 素人考えで、 var hissu=Array("test1","test2","test3"); と var hissu_nm = Array("テスト1","テスト2","テスト3"); ifの部分に単純に obj.type=="select"を追加するだけではできませんでしたm(_ _)m 何か簡単でもいいので、解説いただけると大変喜びますm(_ _)m よろしくお願いいたします

  • javascript/テキストボックスに文字を挿入

    はじめまして。 この度、javascriptで簡単な入力ツールを作成することになりました。 テキストボックスに文字を入力しつつ、 「挿入」ボタンを押したら、定型文からランダムで文末に文字を挿入する。 ……ということをやりたいのです。 やりたいこと例) 「12345」と入力後、「挿入」を押すと「12345あいうえお」になる。 さらに「67890」と入力し、「挿入」を押すと「12345あいうえお67890さしすせそ」になる。 「あいうえお」「かきくけこ」などランダムで文字を表示するところまでできましたが、 「挿入」ボタンを押すたびにテキストボックスの中身がリフレッシュされてしまいます。 コードの記述の仕方などご教示いただけますでしょうか。 あるいは、参考になりそうなサイトなど教えていただけると幸いです。 サンプルコードは以下のとおりです。 何卒よろしくお願いいたします。 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <title>random test</title> <script type="text/javascript"> function rndMsg() { var target = document.getElementById('random'); var message = new Array( 'あいうえお', 'かきくけこ', 'さしすせそ', 'たちつてと', 'なにぬねの' ); var rnd = Math.random() * message.length | 0; target.value = message[rnd]; } </script> <div> <form name="frm1"> <textarea cols="60" rows="8" ID="random"> デフォルト </textarea> </form> <p onclick="rndMsg()">挿入</p> </div>

  • テキストBOXの入力制限について

    テキストBOXを下記のように設定したとします。 <input type="text"name="***" maxlength="30"> この場合は、全角・半角関係なく文字数を30文字入力することができますよね? 今回、私がやりたいことは、バイト数の制限をやりたいんです。 例えばバイト数を30バイトにした場合は、 全角では15文字しか入力できなくて 半角では30文字入力制限をする方法を探しています。 何かよい方法はないものでしょうか???

  • あらかじめ入力されたテキストエリア内のバイト数表示

    以下のようなスクリプトで、テキストエリアに入力された文字のバイト数をカウントしているのですが、 あらかじめテキストエリアに文字が入力されてる場合に「0文字」と表示されます。 ページを開いたとき、あらかじめテキストエリアに文字が入力されてる場合に、そのバイト数を 表示させる方法はあるでしょうか。 もし、おわかりになる方がおられましたら、ご教示いただければ幸いです。 function ShowLength( str ) { len = 0; for(i=0;i<str.length;i++) { var c = str.charCodeAt(i); if ( (c >= 0x0 && c < 0x81) || (c == 0xf8f0) || (c >= 0xff61 && c < 0xffa0) || (c >= 0xf8f1 && c < 0xf8f4)){ len += 1; } else { len += 2; } } document.getElementById("inputlength").innerHTML = len + "文字"; } <textarea onkeyup="ShowLength(this.value);"></textarea> ちなみに、onload="ShowLength(this.value);"では上手くいきませんでした。 宜しくお願い申し上げます。

  • DOMによる、テキストエリアの内容の書き換え

    以下コードを記述し、test.htmlで保存しました。 「ボタンがクリックされたとき、テキストエリアボックスの内容が書き換わる」 と言うことを想定し、作成してみました。 ところが、ボタンをクリックしても、テキストエリアが書き換わりません。 elm[0].Valueでは、駄目なのでしょうか。 ボタンをクリックしたとき、関数までは動いていることは確認できたのですが。 (alertで確認済み) ご教授お願いします。 ==========以下内容====== <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <title>テキストエリア書き直し</title> </head> <body> <h1>テスト</h1> <p>テキストエリアの書き換え</p> <script type="text/javascript"> <!-- function syutoku(){ var elm=document.getElementsByName('textarea1'); elm[0].Value="書き直し"; //alert(elm[0]); } --> </script> <hr> <p>テキストエリアを書き直します。</p> <form name="form1"> <p><input type="button" value="ボタン" onClick="syutoku()"></p> <p><textarea cols="40" rows="4" name="textarea1"> テキスト書き直しエリア</textarea></p> </form> <hr> </body> </html>

  • フォームの<TEXTAREA>で文字数制限する方法はありますか?

    こんにちは。フォームの<TEXTAREA>で入力文字数を制限をする方法を知りたいのですが、解る方がいらっしゃいましたら教えてください。 MAXLENGTHなどは使用できないようでしたので、Javascriptでの制限方法などがあるのかなと思い書き込みさせていただきました。具体的には全角150文字前後に制限したいと思っております。(※前後全角10文字くらいは誤差があってもかまいません。) サーバーサイドではなくクライアントサイドで動く仕様のものが良いので、こちらに書き込みさせていただきました。よろしくお願い致します。

専門家に質問してみよう