重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

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

失礼します。
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>

A 回答 (3件)

>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();
    • good
    • 0
この回答へのお礼

ありがとうございます!!

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

お礼日時:2008/12/12 22:17

ソースを拝見させていただいた感じですと、同じ変数を使うということをしておられますが、あまりいい記述の仕方ではありません。



できれば、違う変数名を使い
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を評価するそれも問題なければ、送信処理をすると言った感じにすれば問題なく動作すると思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。
書き方がまずかってですか><

うむむ。。。 再度勉強しなおしてみます。
ありがとうございます。

皆さんにご回答いただいて大変勉強になりました。

こちらも後程ためさせていただきます。

お礼日時:2008/12/12 22:25

現在のコードだと


 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{サブミット}

とか…やりかたは、いろいろあると思うけど。
    • good
    • 0
この回答へのお礼

ありがとうございます。

なるほどいろいろな書き方が・・・あるんですね。
参考になります。

私にはまだ難しいようなので今後のためにも参考にさせていただきます!。

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

お礼日時:2008/12/12 22:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!