JavaScriptでフォームの半角数字のチェックをしたいのですが、
form内容をCGI(PHP)に渡すためname値を配列にしないといけないのですが、
以下のスクリプトだとエラーが出てしまいます。

*実際はif(isNaN~)と<input~>をループで書き出しており、行数が不特定なので
それぞれ別のname値を使うことができない状態です。

<script language="JavaScript">
function check() {
if(isNaN(document.form1.hoge[0].value)){
alert("値は半角数字で入力してください。");
return(false);
}
if(isNaN(document.form1.hoge[1].value)){
alert("値は半角数字で入力してください。");
return(false);
}
return(true);
}
</script>

<form method="post" action="xxx.cgi" onSubmit="return check()" name="form1">
<input type="text" name="hoge[0]">
<input type="text" name="hoge[1]">
</form>

特にCGIに渡す必要がなければ
<input type="text" name="hoge">
<input type="text" name="hoge">
としてやればチェックができるのですが、どうしても次の
処理があるためname値を配列にする必要があります。

解決方法がわかる方がおられましたらご教授ください。
以上よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

かなり力業ですが、以下の方法でイケます。

ええイケますとも。

function check(){
 for(i=0;i<=document.all.length;i++){
  try{
    if(document.all[i].name.indexOf('HOGE[',0) != -1)
     if(isNaN(document.all[i].value)){
      alert("値は半角数字で入力してください。");
      return false;
     }
  }catch(x){}
 }
}

上記のままコピー&ペーストすれば使えますが、
その際他のフィールドの名前に'HOGE['は使わないようにしてくだサイね。
    • good
    • 0
この回答へのお礼

ありがとうございました!
makokokoさんのスクリプトで思ったとおりの動作しました。

ついでに空白チェックも以下のようにしてみました。

if(document.all[i].value==""){
alert("値を入力してください。");
return false;
}

どうもありがとうございました。

お礼日時:2001/08/20 09:38

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

このQ&Aと関連する良く見られている質問

Q

<input type="hidden" name = "hoge">があったとします。
これを、javascriptを使用し nameで検索します。
”hoge”を検索後、その”hoge”という名前を変更する方法を探しています。 

<input type="hidden" name = "hoge">
       ↓↓↓↓↓
<input type="hidden" name = "fuga"> 

リフレッシュ無しで、上記のようにnameを変える方法が知りたいです。

ご存知の方おりましたら、お手数ですが教えていただけませんでしょうか。
宜しくお願いいたします。

Aベストアンサー

タグが特定出来れば、setAttribute等で属性値を変更出来ます。
setAttribute("name","fuga")

Qで、Q1に後で値を設定して表示するには

お世話になります。
<input type="text" name="Q1">で、Q1に後で値を設定して表示するにはどうしたら良いものでしょうか。
name="Q1"
と、しているので、
onMousedown="function()"
で、nameでしてしたエリアに値を書き込めば、できると思うのですが、
このfunction()をどのように書いたらよいものか、いろいろ調べてもわかりません。
何とかご教示願えないでしょうか。
よろしくお願いします。

Aベストアンサー

javascriptを利用することで出来ます。
こんな感じで動くでしょう。
ちなみにテキストボックスなどをjavascriptで操作する場合は
idをつけておくと便利です。

これ以上をやりたいというのであれば
参考URLなど見て勉強してみてください
<html>
<head>

</head>
<body>

<input type="text" id="Q1" name="Q1" onmousedown="hoge()">
</body>
<script type='text/javascript'>
function hoge()
{
Q1.value = ""; //""のなかに設定する値
}
</script>

参考URL:http://www.parkcity.ne.jp/~chaichan/src/javasc21.htm

Q同一nameの input type="text" の合計を計算したい

初めて質問させて頂きます。
form 内で同じname名を付けられたテキストフィールドの値の合計を計算し、その値に定数を乗じた値を表示させたいのですが、出来ずに困っております。
name名を別にすれば簡単に出来そうなのですが、このinputが別CGIからの受け取りの関係で数が不定で同一nameが付いてしまいます。(inputは1個以上で上限は無し)
CGI側を書き換える事は自分の技術的に不可能なので、このような質問となりました。

以下は自分なりに試行錯誤の末の拙いソースです。
どなたかお分かりになる方、ご教授を宜しくお願い致します。

<html>
<head>
<script type="text/javascript" src="prototype.js"></script>
<script type="text/javascript">
<!--
function kakunin() {

var sub = Form.getInputs('form1', 'text');
( var subtotal = ~~~; ここに上で得た数字を合計するみたいなものがくるのかなと・・・)
var total = subtotal * 200;

document.form1.field_total.value = total; // 合計を表示

}
// -->
</script>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
</head>
<body>
<form action="" name="form1">
<table>
<tr><td><input name="kazu" type="text" value="2"></td></tr>
<tr><td><input name="kazu" type="text" value="1"></td></tr>
<tr><td><input name="kazu" type="text" value="3"></td></tr>
<tr><td>・・・増えたりします・・・</td></tr>
<tr><td><input type="button" size="8" onclick="kakunin()" value="合計を確認"></td></tr>
<tr><td><input type="text" name="field_total" size="30" value="total"></td></tr>
</table>
</form>
</body>
</html>

初めて質問させて頂きます。
form 内で同じname名を付けられたテキストフィールドの値の合計を計算し、その値に定数を乗じた値を表示させたいのですが、出来ずに困っております。
name名を別にすれば簡単に出来そうなのですが、このinputが別CGIからの受け取りの関係で数が不定で同一nameが付いてしまいます。(inputは1個以上で上限は無し)
CGI側を書き換える事は自分の技術的に不可能なので、このような質問となりました。

以下は自分なりに試行錯誤の末の拙いソースです。
どなたかお分かりになる方、...続きを読む

Aベストアンサー

getElementsByNameで同一Nameを持つ要素(配列)が求められます。
var 合計 = 0;
var 要素 = document.getElementsByName("kazu");
for( var i = 0 ; i < 要素.length ; i++ ) {
  var 値 = parseInt(要素[i].value);
  if( !isNaN(値) ) 合計 += 値;
}
同じ名前でボタンとかないですよね?
あるんだったらTypeも見なければなりません。(上記コードには無い)

Qを選択した時にCtrl+Aになってほしい

ユーザーにURLをコピーしてもらいたいのですが、
<input type="text" name="url" value="http://xxx.com/xxx">
という項目があり、マウスを入力ボックスでクリックすると
Ctrl+Aを押した時と同じ動作にすることは可能でしょうか?

クリップボードにコピーするのは、IE7以降で警告が
出るようなので、Ctrl+Aで全選択してもらう方向で考えています。

Aベストアンサー

Googleで「javascript リファレンス」で検索したところ、
http://www.tohoho-web.com/js/form.htm#ElmText
というページがありました。

ここの「27. フォーム部品(テキスト部品)」に書かれている1文が
そのまま php4 さんの求めているものだと思いますよ。

Q

▼次のようにページ内のdivタグのidの名前によって、formタグ内の要素をdisableにすることはJava scriptによって可能でしょうか?

<div id="AA">のとき、別の場所にある<form id="BB">内のselect要素などすべての要素をdisableにする。

また同時に、id="BB"に指定したスタイルシートの記述を書き換えることは可能でしょうか?

何かよい方法をご存知でしたら教えてください。よろしくお願いいたします。

Aベストアンサー

>なぜか時々エラーが出ます。
ウチでちょっと試した程度ではエラーが発生しませんでした。
できましたら、発生したときのメッセージや場所また、ブラウザの種類なども教えてください。

以下は、予防的な意味での注意点についてちょっと書きます。
>return false;

は、必要ないです。
書かない方がいいと思います。
==nullの場合の処理が必要ないなら
!=nullにすればよいです。
もしくは
return false;でなくて
;
のように空文でもよいです。
あと、idに使っている名前と同じ名前を変数名として使わない方が良いです。
つまり、
id="soldout"の時に
var soldout;という風にはしない方が良いです。
同じでなければ、cartFormでもなんでもかまいません。
あと、scriptは、
<!--
(スクリプトの中身)
//-->
のように
<!--
//-->
で囲むようにします。

getElementById
は、ブラウザやのブラウザのバージョンによっては使えないことがあります。
その場合は、使えるかどうかを調べる必要があります。

<script type="text/javascript">
<!--
function stockStatus (num){
var f=document.getElementById("soldout");

if(f!=null){
for (var i =0; i<=f.length -1 ;i++){
f.elements[i].disabled=num;
}
}
}
//-->
</script>

>なぜか時々エラーが出ます。
ウチでちょっと試した程度ではエラーが発生しませんでした。
できましたら、発生したときのメッセージや場所また、ブラウザの種類なども教えてください。

以下は、予防的な意味での注意点についてちょっと書きます。
>return false;

は、必要ないです。
書かない方がいいと思います。
==nullの場合の処理が必要ないなら
!=nullにすればよいです。
もしくは
return false;でなくて
;
のように空文でもよいです。
あと、idに使っている名前と同じ名前を変数名として...続きを読む


人気Q&Aランキング

おすすめ情報