プロが教える店舗&オフィスのセキュリティ対策術

似たような記事が多くそれぞれの回答を試してみたのですが、うまくいかなかったため質問させていただきます。

ただいまテキストBOXとプルダウンメニューで成り立つ入力フォームを作成しています。

そこで、テキストはすべて入力した状態、プルダウンメニューを一番上以外のものを選択した状態でないと次の画面に遷移しないようにしたいのですが、プルダウンメニューの所だけうまくいきません。どうか回答よろしくお願いします。以下にソースをすべて載せておきます。

<html>
<head>
<title>test</title>
<script language="JavaScript"><!--

function check(){

fName = ["id","name","grade","english","math","japanese","science","society"];
for (i=0; i<8; i++){
txt = document.forms[0].elements[fName[i]].value;
if (txt == "") {
alert("すべての項目を入力してください");
return false;
}
}
var sel;
sel = document.forms.school.value;
if(sel=="00"){
alert("選択されていない項目があります");//アラート表示
return false;
}


return true;
}
// --></script>
</head>
<body>
<form action="student_add1.php" name="forms" method="get" onSubmit="return check()">
生徒番号:<select name="school">
<option value="00">==学校名==</option>
<option value="01">桜中学校</option>
<option value="02">紅葉中学校</option>
<option value="03">青山中学校</option>
<option value="04">高岡中学校</option>
<option value="05">中野中学校</option>
</select><input type="text" name="id" size="3"><br>
氏名:<input type="text" name="name" size="12"><br>
学年:<input type="text" name="grade" size="2"><br>
模試成績:<br><br>英語:<input type="text" name="english" size="3">
数学:<input type="text" name="math" size="3">
国語:<input type="text" name="japanese" size="3">
理科:<input type="text" name="science" size="3">
社会:<input type="text" name="society" size="3"><br>
<input type="submit" value="送信">
<input type="reset" name="reset" value="リセット">
</form>
</body>
</html>

A 回答 (3件)

単純な記載ミスですね



× sel = document.forms.school.value;
○ sel = document.forms[0].school.value;

ちなみにformでcheck()を呼ぶときに
check(this)として、フォームをオブジェクトとしてわたしてやると
かなりすっきりしたスクリプトがかけます
    • good
    • 0
この回答へのお礼

返答が遅くなり申し訳ございません。

指摘していただいたように修正したところ、うまく動作するようになりました。とても早い回答ありがとうございました。

なお、

>check(this)として、フォームをオブジェクトとしてわたしてやると
>かなりすっきりしたスクリプトがかけます

ということですが、その場合

sel = document.forms[0].school.value;を
sel = obj.forms[0].school.value;

と変更することになるのでしょうか?大学の課題でやっている程度ですので、全く詳しいことが理解出来ていません。
余力がございましたらご教授いただけるとうれしく思います。

お礼日時:2007/07/11 23:14

#2です



たとえば、こんなかんじにformタグのなかでthisをつかうと
そのフォーム自体が関数にわたされます。
今回はそれをfというオブジェクトに格納したので、
document.forms[0]といちいち書かずに、fで代用できるわけです。
フォームを番号で管理しているとhtmlを拡張するときに
番号がかわってしまったりすると書き直しになって管理が大変です。
オブジェクトでわたしてやると名前や番号で管理しなくてすむので
なにかと便利です。

<html>
<head>
<title>test</title>
<script language="JavaScript"><!--
function check(f){
var fName = ["id","name","grade","english","math","japanese","science","society"];
var txt ="";
for (i=0; i<8; i++){
txt = f.elements[fName[i]].value;
if (txt == "") {
alert("すべての項目を入力してください");
return false;
}
}
var sel= f.school.value;
if(sel=="00"){
alert("選択されていない項目があります");//アラート表示
return false;
}
return true;
}
// --></script>
</head>
<body>
<form onSubmit="return check(this)">
・・・・
</form>
</body>
</html>
    • good
    • 0
この回答へのお礼

おお、確かにすっきりしますねぇ。

一応大学の課題は完成したのでここで閉めさせていただきますが、

気が向いたら本格的に勉強してみようと思います。

迅速な回答ありがとうございました。

お礼日時:2007/07/13 00:30

sel = document.forms.school.value;


if(sel=="00"){

この2行を

var sel = document.forms.school.selectedIndex;
if(sel==0){

とされてはいかが?
    • good
    • 0
この回答へのお礼

試したところうまく動作はいたしませんでしたが、

とても早い回答ありがとうございました。

また機会がありましたらよろしくお願いいたします。

お礼日時:2007/07/11 23:15

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