- ベストアンサー
通し番号の変数を一括チェックするには?
JavaScriptでフォームの入力値のチェックを行う プログラムを書いています。 OnSubmitで処理を行っているのですが、チェック対象の テキストボックスが大量に存在しているので、 なんとか効率良く処理できないでしょうか? if( !NumCheck(form.text1.value) || !NumCheck(form.text2.value) || !NumCheck(form.text3.value) || /* ・・・ */ !NumCheck(form.text100.value) ) これをforか何かで回せるとベストなのですが…。 PHPのように文字列を変数名に変換する方法など、 なにか良いアプローチがありましたらご教示願います。 問題の部分抽出したHTMLを下に載せておきます。 そのままでは動きませんが、雰囲気が伝わればと。 インデントがなくてすみません。 よろしくお願いいたします。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <script type="text/javascript"> <!-- function submitCheck(form){ if( !NumCheck(form.text1.value) || !NumCheck(form.text2.value) || !NumCheck(form.text3.value) || /* ・・・ */ !NumCheck(form.text100.value) ) { alert('入力エラー'); return false; } return true; } function NumCheck(value){ var tmp = value.match(/[0-9]+/g); if(tmp != value) return false; return true; } //--> </script> </head> <body> <form name="form1" action="test.cgi" target=_self method="post" onSubmit="return submitCheck(this);"> <input type="text" name=text1> <input type="text" name=text2> <input type="text" name=text3> /* ・・・ */ <input type="text" name=text100> </form> </body> </html>
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
form.text1 に "text1" という文字列を使ってアクセスするには form["text1"] とします。 この時、"text1" の部分は「式」なら何でもよいので、form["text" + i] のように書いて for ループで処理することもできます。 for (var i = 1; i < 100; i++) { if (!NumCheck(form["text"+i].value)) { alert('入力エラー'); form["text"+i].focus(); // エラー箇所にフォーカスを当ててあげると親切かも。 return false; } } ちなみに数値か否かの判断には isNaN() が便利です。 isNan() は引数が数値かチェックし、数値なら false、数値以外なら true を返します。(NaN は Not a Number の略)
その他の回答 (1)
- davosuke
- ベストアンサー率61% (34/55)
var nLen = form.elements.length; //フォーム内全ての要素の数(テキストやボタンやテキストエリア等) for(var nRpCnt=0;nRpCnt<nLen;nRpCnt++){ var name = form.elements[i].name; //要素iの名前 var value = form.elements[i].name; //要素iの値 if(value == ""){ ; } } このように各要素をチェックできます。
お礼
組み込んで確認しましたが、 期待どおりに動きました! ありがとうございます。
お礼
こんなアプローチもあるのですね。 PHPの可変変数と似た使い勝手で使えそうですね。 dovosukeさんの手法とどちらを使うか良く検討してみます。 isNaN()も知りませんでした。 勉強不足です。 ありがたく使わせていただきますね。 あと! form["text"+i].focus(); この指摘は驚きです! これ感謝です。使わせてもらいます。 ありがとうございます。