フォームのプルダウンメニューの選択をしていない時、エラーを返すには?

[上に] [前に] [次に]
ココリコ 2000/01/19(水) 19:06:58
教えてください。
メニューを選択しない場合(”こちらのリストから、項目を選択してください。”)や
もしくは空白行を選択した場合はエラーを返したいのです。
*>>  <option value="" selected>こちらのリストから、項目を選択してください。</option>
*>>  <option value=""> </option>

でも、どうしてもエラーが出てくれません。
a.hana.valueの値を見てみたら、nullが表示されてました。

<INPUT TYPE...ではうまくいくのに、<select...では駄目なのでしょうか?
どなたか教えてください。

--SCRIPT--
<script language="JavaScript">
<!--
function doremi(a){
  if(a.hana.value == ""){
    alert("花をリストメニューより選んでください。");
    return false;
  }
  }
// -->
</SCRIPT>

--FORM--
<select name="hana" size="1">
  <option value="" selected>こちらのリストから、項目を選択してください。</option>
  <option value=""> </option>
  <option value="01">バラ</option>
  <option value="02">カーネーション</option>
  <option value="03">カスミソウ</option>
  <option value="04">ゆり</option>
</select>

かえる 2000/01/19(水) 21:18:08
エラーにしたい項目の value に負の値を設定し、項目のチェックを行う時に value が負の値ならばエラーにするとよいかと思います。

<script language="JavaScript">
<!--
function doremi(a){
 if(a.hana.value < a){
  alert("花をリストメニューより選んでください。");
  return false;
 }
}
// -->
</SCRIPT>

<select name="hana" size="1">
 <option value="-2" selected>こちらのリストから、項目を選択してください。</option>
 <option value="-1"> </option>
 <option value="1">バラ</option>
<select>

ココリコ 2000/01/20(木) 09:54:02
かえるさん、ありがとうございます。
でも、このやり方では駄目でした。

<select..のあとには
<INPUT...があり、<select...を飛ばしてエラーを返してきます。
どうしても、
<select...でエラーを返したいのです。

宜しくお願いします。

蓮子 2000/01/20(木) 14:27:48
<INPUT... に続くものはなんでしょうか?
JavaScriptにチェックののロジックを書く順番がまずいのでは?

このJavaScriptを起動するのはどんなタイミングですか?
---
<FORM ACTION="doremi">
  <SELECT>〜</SELECT>
  <INPUT TYPE="SUBMIT">
</FORM>
例えばこんなカンジで全体が見えないとよくわかりません。

蓮子 2000/01/20(木) 14:30:08
失敬、自明ながら<FORM ACTION="doremi(〜)">でした。

sound 2000/01/20(木) 15:09:20
こういうのはどうですか?
how=document.form_name.select_name.selectedIndex;
if(how == "0"){
    alert("花をリストメニューより選んでください。");
    return false;

ココリコ 2000/01/20(木) 18:35:05
蓮子さん、ご意見ありがとうございます。
soundさん、ありがとうございました。
そのように、やってみたら出来ました。

ただ、実は
<option value="xxx">???</option>の項目は
100ほどあります。
また、ところどころコメント行やスペース行を入力しています。
それを選択してもエラーを返したいのです。
そういう行はvalue=""としているので、
できれば、valueで判断させる方法はないでしょうか?
(つまり、value=""の時は、エラーとしたいのです。)


蓮子さんに応えてもう一度書くと下のようになっています。
--SCRIPT--
<script language="JavaScript">
<!--
function doremi(a){
  if(a.hana.value == ""){
    alert("花をリストメニューより選んでください。");
    return false;
  }
  }
//
  if(a.ki.value == ""){
    alert("季節を入力してください。");
    return false;
  }

// -->
</SCRIPT>

--FORM--
<form name="flower" action="・・・/flower.cgi" method="POST" onsubmit="return doremi(this)">
<select name="hana" size="1">
  <option value="" selected>こちらのリストから、項目を選択してください。</option>
  <option value=""> </option>
  <option value="01">バラ</option>
  <option value="02">カーネーション</option>
  <option value=""> </option>
  <option value="">◎贈り物に◎</option>
  <option value="04">ゆり</option>

</select>
<br>
<input type="text" name="ki" size="50" maxlength="100" value="">
:
</form>

とこやん 2000/01/20(木) 20:41:53
ココリコさん、皆さんこんにちわ。

selectのvalueを取る方法ですが、このラウンジで何度も紹介されいますよ!
って書いて、「select value」で検索したら、1件も引っかからなかった。。。なぜ?なぜ?
私もここで教えてもらったのに。。。

と言う訳で、自分でやっている方法をご紹介させて頂きますと、
document.form.element.options[document.form.element.selectedIndex].value
ってな感じです。
お試しあれ。

蓮子 2000/01/20(木) 20:47:24
  how=document.form_name.select_name.selectedIndex;
  ms=document.form_name.select_name.options[how].value;
  if(ms==""){
  //アラート表示
  }

こうかなぁ。

蓮子 2000/01/20(木) 20:55:27
あらら、遅れをとりました。変数で書いただけで同じ事です(^^)。
私は空白でなくダミー文字を使っていますがどっちでもいいのですね。

かえる 2000/01/20(木) 21:09:02
select の value には選択されている option の value が入っているので、
flower.hana.value を見るだけでよいはずなのですが。

if( flower.hana.value == null || flower.hana.value == "" ){
 alert("花をリストメニューより選んでください。");
 return false;
}

これでどうでしょうか?

ココリコ 2000/01/24(月) 16:29:36
[[解決]]
ご連絡遅くなりました。
出来ました。
とこやんさん、蓮子さんの方法で試しました。
ありがとうございました。

かえるさんのは残念ながら、うまく行きませんでした。
(どうしても、エラーを飛ばして素通りしてしまいました。)
でも、いろいろありがとうございました。

とこやん_san、このラウンジで何度も紹介...の件ですが、
きちんと検索及び同様質問内容チェックしてからここに質問してるので、
ご心配なく。結構応用力が無いと難しいかもしれませんね。

  how=document.form_name.select_name.selectedIndex;
  ms=document.form_name.select_name.options[how].value;

のやり方options[]も、本で調べてやってみたのですが、うまく出来ませんでした。
いろいろやりすぎて、何が違っていたのか、よくわかりません。

ともかく、こちらで教えて頂いて、とても正確で早急な理解を得る結果となりました。
ありがとうございました。

[上に] [前に] [次に]