• ベストアンサー

if をいくつか重ねたら実行してくれません

function incheckの中に、5つほどifを重ねてみました。条件に合わないとアラーとをだします。選択はラジオボタンで行っています。 条件に合わないと各々それに応じたアラートがでるところまではなんとか出来ましたが、 2回目に選択しなおして、かつそれが再度すべての条件にあっていないにもかかわらず、OKとされてしまいます。 一度ひとつのif条件にあったことをしてしまうと、そのif条件は2度目からチェックしてくれません。 どうすれば、つどつど全部のif条件をチェックしてくれるでしょうか? 尚、こちらにタグを貼ろうとしたら、質問の欄は文字制限があるようで、ちょっとオーバーしてしまいました。 どなたかが回答してくださったら、すぐに補足欄にはらさせていただきます。 あいまいな質問で申し訳ないのですが、どなたかよろしくご指導願います。

質問者が選んだベストアンサー

  • ベストアンサー
  • madman
  • ベストアンサー率24% (612/2465)
回答No.2

ひとつづつ必ず選んで、順位付けをするようにするのでしょうか。 それで、一度りんごを1位にして、みかんを1位に選びなおすとりんごの未チェックが判定できない。ということでしょうか。 これは、チェックが外れたときにfalseにならないせいですね。 それだと、このようにしてはいかがですか。 ---- <p>りんご <input type="radio" name="R1" value="りんご" onclick="f11=true,f12=false,f13=false"> <input type="radio" name="R2" value="りんご" onclick="f21=true,f22=false,f23=false"> <input type="radio" name="R3" value="りんご" onclick="f31=true,f32=false,f33=false"></p> <p>みかん <input type="radio" name="R1" value="みかん" onclick="f11=false,f12=true,f13=false"> <input type="radio" name="R2" value="みかん" onclick="f21=false,f22=true,f23=false"> <input type="radio" name="R3" value="みかん" onclick="f31=false,f32=true,f33=false"> </p> <p>いちご <input type="radio" name="R1" value="いちご" onclick="f11=false,f12=false,f13=true"> <input type="radio" name="R2" value="いちご" onclick="f21=false,f22=false,f23=true"> <input type="radio" name="R3" value="いちご" onclick="f31=false,f32=false,f33=true"> </p> --- 他のラジオボタンが押されたときに、その他のフラグ情報をfalseにします。 もっとスマートな方法があるかもしれませんが、とりあえずお試しください。

yukiko5
質問者

お礼

でけました。ありがとうございました。 とてもわかりやすかったです。 遅い時間にすばやく対応頂きまして助かりました。 ありがとうございました。

yukiko5
質問者

補足

>ひとつづつ必ず選んで、順位付けをするようにするのでしょうか。 >それで、一度りんごを1位にして、みかんを1位に選びなおすとりんごの未チェック>が判定できない。ということでしょうか。 そうです。まさにそうです。 >これは、チェックが外れたときにfalseにならないせいですね。 そうか!そうすればいいのかー。 >それだと、このようにしてはいかがですか。 はい、さっそくやってみたいのですが、退社時間がきてしまいました。 自宅に帰ってから、再度挑戦いたします。 ひょっとしたらお礼が月曜になってしまうかもしれませんが、 申し訳ないのですが、少々お待ちくださいませ。 本当にありがとうございました。やってみまーす!

その他の回答 (2)

  • leaz024
  • ベストアンサー率75% (398/526)
回答No.3

チェックが外れた時に、変数をfalseにしてないのが原因、というのは madman さんの回答の通りですね。 ラジオボタン1個ごとに変数を作って真偽値で判断されてますが、1位は今何で、2位は何で、ということを管理した方が、プログラムがすっきりしますよ。 以下、参考程度に # スクリプト部 <SCRIPT><!-- f1 = f2 = f3 = 0; RINGO = 1; MIKAN = 2; ITIGO = 3; // 入力ミスの判別 function incheck() {   var err = '';   err += fcheck(RINGO, "りんご", err);   err += fcheck(MIKAN, "みかん", err);   err += fcheck(ITIGO, "いちご", err);   if (err) {     alert(err + "が選択されていません。");     return false;   }   return true; } // くだものの選択チェック function fcheck(code, name, err) {   if (f1 != code && f2 != code && f3 != code)     return (err ? 'と' : '') + name;   return ''; } //--></SCRIPT> # BODY部 <P>  りんご  <INPUT type="radio" name="R1" value="りんご" onclick="f1=RINGO">  <INPUT type="radio" name="R2" value="りんご" onclick="f2=RINGO">  <INPUT type="radio" name="R3" value="りんご" onclick="f3=RINGO"> </P> <P>  みかん  <INPUT type="radio" name="R1" value="みかん" onclick="f1=MIKAN">  <INPUT type="radio" name="R2" value="みかん" onclick="f2=MIKAN">  <INPUT type="radio" name="R3" value="みかん" onclick="f3=MIKAN"> </P> <P>  いちご  <INPUT type="radio" name="R1" value="いちご" onclick="f1=ITIGO">  <INPUT type="radio" name="R2" value="いちご" onclick="f2=ITIGO">  <INPUT type="radio" name="R3" value="いちご" onclick="f3=ITIGO"> </P> ちなみに、送信ボタンの onClick での入力チェックは不要です。 送信ボタンを押しても、FORM の onSubmit が動いて、チェックをしてくれます。

yukiko5
質問者

お礼

ありがとうございました。 せっかく私にあったJavaさんを書いていただいたのですが、 まだJavaを始めて1週間の私にはちょっと難しかったです。 今回はmadmanさんの方を参考にさせていただきますが、 今後の課題としてleazさんのがわかるようになりたいです。 ありがとうございました

  • madman
  • ベストアンサー率24% (612/2465)
回答No.1

回答できるかわかりませんが、とりあえずソースを見せてください。

yukiko5
質問者

補足

<script language="JavaScript"> <!-- f11=false; f21=false; f31=false; f12=false; f22=false; f32=false; f13=false; f23=false; f33=false; //入力ミスの判別 function incheck() { if (f11==false && f21==false && f31==false){ window.alert("りんごが選ばれていません"); return false;}    if (f12==false && f22==false && f32==false){ window.alert("みかんが選ばれていません"); return false;} if (f13==false && f23==false && f33==false){ window.alert("いちごが選ばれていません"); return false;} } //---> </script> <form action="http://www.altoworld.com/form2/post.cgi" method="POST" onsubmit="return incheck();"> <p>りんご<input type="radio" name="R1" value="りんご" onclick="f11=true"> <input type="radio" name="R2" value="りんご" onclick="f21=true"> <input type="radio" name="R3" value="りんご" onclick="f31=true"></p> <p>みかん<input type="radio" name="R1" value="みかん" onclick="f12=true"> <input type="radio" name="R2" value="みかん" onclick="f22=true"> <input type="radio" name="R3" value="みかん" onclick="f32=true"></p> <p>いちご<input type="radio" name="R1" value="いちご" onclick="f13=true"> <input type="radio" name="R2" value="いちご" onclick="f23=true"> <input type="radio" name="R3" value="いちご" onclick="f33=true"></p> <p>左から順に1位・2位・3位と考えてください。</p> <p><input type="submit" name="B1" value="送信"  onclick="return incheck()"> </p> </form> こんなのです。よろしくおねがいします。。。。(ちゃんと動くかな???)

関連するQ&A

  • メールフォームの未入力チェック ラジオボタンの場合

    メールフォームに、」ラジオボタンでA~Eの項目があります。これを仮に”koumoku”という名前をつけたとして、最初にはどこにもチェックを入れない状態で表示したいと思います。 それで、A~Eのどれかを必ず選択してもらいたいので送信前に未入力の場合にはアラーとを出したいのですが、 if(document.mail.Koumoku.value!='checked'){ window.alert('未入力個所があります。\nご確認ください。'); return false; } にすると、チェックしてもアラーとがでてきます。 また !='chekced' を =='' にすると、チェックが無くても通ってしまいます。 どうしたら良いのでしょうか?

  • if文でelseが実行されない

    function jump(){ if (point_x != ""){ location.href="new_diary.php?x="+point_x+"&y="+point_y; } else { alert ("場所をダブルクリックで指定してください。"); } } このような文で、point_x != ""のときは別ページに飛んでくれるのですが、 elseのときにアラートが表示してくれません。 初歩的な質問だと思いますが、宜しくお願いします。

  • チェックボックスの選択チェック

    ラジオボタンの選択チェック、セレクトボタンの選択チェックのあとにチェックボックスの選択チェックをしたいのですが、どのように入れればよいのでしょうか。教えてください。 ↓参考までに↓ function check() { var flag=0; if( document.form1.seibetu.length){ flag=1; var i; for(i=0; i<document.form1.seibetu.length; i++) if(document.form1.seibetu[i].checked)flag=false; } if(flag){ alert('性別が選択されていません'); return false; } if(document.form1.nenrei.value=="")flag=true; if(flag){ alert('年齢が選択されていません'); return false; } if( document.form1.Q1.length){ flag=1; var i; for(var i=0; i<document.form1.Q1.length; i++) if(document.form1.Q1[i].checked)flag=false; if(flag){ alert('Q1が選択されていません'); return false; } else {★★★ここに入れたい★★★   ;} } }

  • if文の挙動が変です。何が悪いのでしょうか?

    こんにちは,よろしくお願いします。次のような関数を作って,条件に当てはまれば,formElemを送信するコードを書いたところ,条件を満たしていないのにもかかわらず,送信されてしまいます。それはどこが悪いのでしょうか。教えてください。 もう少し詳しく言うと,この関数は,p1とg1が変更されたとき(onchngeで)に呼び出されるようになっています。 このとき,p1が先に変更され(条件1)を満たしtrueになり,その後で,g1が変更され(条件2)がtrueになったときは,正常に機能します。alert("yes-submit");も表示され,formの送信も実行されます。 しかし,この逆で,g1が先に変更され(条件2)を満たしtrueになった時に,formが送信されてしまうのです。(条件1)が満たされていないのにもかかわらずです。気づかないうちに,条件を満たしていることもあるのかと思って,alert("yes-submit");を追加しました。しかし,そのalert("yes-submit");は表示されません。つまり,最後のif文がyesの時に実行されるブロックを通過していないのにもかかわらず,formの送信のみが行われてしまうのです。(true)&&(false)でyesにはなりませんよね。これって,変ですよね。いったいなぜ,このような挙動を示すのでしょうか?お願いします。教えてください。 function SchlSlct(){ var formElem = document.getElementById("form1"); if(document.getElementById("p1").selectedIndex > 0){ alert("p-yes"); }else{ alert("p-no"); } //以上(条件1) if(document.getElementById("g1").value != ""){ alert("g-yes"); }else{ alert("g-no"); } //以上(条件2) if((document.getElementById("p1").selectedIndex > 0) && (document.getElementById("g1").value != "")){ alert("yes-submit"); formElem.submit(); } //以上((条件1)&&(条件2)) }

  • ラジオボタンの選択によってチェックボックスのチェックできる個数を制限し

    ラジオボタンの選択によってチェックボックスのチェックできる個数を制限したい。 他の方の質問を見たのですがマッチする質問がなかったのでご質問させていただきます。 現在申し込みフォームを作成しているのですが、要件としては、 ラジオボタンの選択によってチェックボックスのチェックできる個数を制限したい。 と思っています。javascriptで実現できると思うのですがなかなかできずに困っております。 <ラジオボタン> ○りんご ○みかん ○めろん ○すいか <チェックボックス> □青森産 □愛媛産 □千葉産 □神奈川産 りんごを選んだ人は、チェックボックスで1つしか選択できないようにしたい。 みかんを選んだ人は、チェックボックスで2つしか選択できないようにしたい。 めろんを選んだ人は、チェックボックスで3つしか選択できないようにしたい。 すいかを選んだ人は、チェックボックスで4つ選択できるようにしたい。 可能であれば制限を超えた場合はアラートを上げたいと思います。 2つまでしか選べませんというように。 大変申し訳ありませんが、参考になるページやソースなどを教えていただければと 思います。よろしくお願い致します。

  • このif構文の間違いを教えて下さい。

    どうぞ宜しくお願いします。 *onsubmitでアラートを出力するようにしています。 if条件も"||"でひとまとめにもしてみましたが上手くいきませんでした。 ########################################## print "<SCRIPT LANGUAGE=\"JavaScript\">\n"; print "<!--\n"; print "function FldChk(){\n"; print " if( document.MyForm.name.value == '' ){\n"; print " alert('名前\、E\-mail\、選択項目は必須入力です ');\n"; print " return false;\n"; print " }\n"; print " if( document.MyForm.email.value == '' ){\n"; print " alert('名前\、E\-mail\、選択項目は必須入力です ');\n"; print " return false;\n"; print " }\n"; print " if( document.MyForm.comment.value == 'noting' ){\n"; print " alert('名前\、E\-mail\、選択項目は必須入力です ');\n"; print " return false;\n"; print " }\n"; print " else{\n"; print " alert('O\Kを押して10\秒\後に申\込が完\了します。有\難う御\座いました\♪ ');\n"; print " return true;\n"; print " }\n"; print "}\n"; print "// -->\n"; print "</SCRIPT>\n"; #############################################

  • ネストしない複数のif文でelseは必要でしょうか

    if文についての疑問を質問させてください。 if文はelseを挟むことで複数指定したり入れ子にしたりして使えますが、 elseを未入力で下記のように複数指定することは問題があるのでしょうか。 また、このように24個のifを並べるという書き方はよろしくないものなのでしょうか。 <script type="text/javascript"> (function() { var image_obj = new Image(); image_obj.src = "../image/"; var jikan_obj = new Date(); var htime = jikan_obj.getHours(); if(htime==0){alert('日が変わりました');} if(htime==1){alert('夜中です');} if(htime==2){alert('2時です。');} if(htime==3){alert('真夜中です');} if(htime==4){alert('もうじき朝です');} if(htime==5){alert('新聞が届きました');} if(htime==6){alert('朝です');} if(htime==7){alert('忙しいです');} //これが23まで続きます。 if(htime==23){alert('もうじき日が変わります');} })(); </script>

  • 複数のラジオボタンの選択チェック

    Q1とQ2の2問があり、ラジオボタンで回答を選択するようにしていますが、 ラジオボタンを選択しなかった場合、選択を促すようメッセージを表示させるようJavaScriptで以下のように作成してみましたがうまくいきません。 Q1とQ2の両方を選択しなかった場合、「Q1が選択されていません」とメッセージが表示されますが、Q1だけを選択してQ2を選択しなかった場合はメッセージが表示されません。 いろいろ調べてみたのですが、function checkの使い方に問題があるのでしょうか? function check(){ var flag = 0; if(document.form1.Q1.length) { flag = 1; var i; for(i = 0; i < document.form1.Q1.length; i ++){ if(document.form1.Q1[i].checked){ flag = 0; break; } } } if(flag){ window.alert('Q1が選択されていません'); return false; } else{ return true; } var flag = 0; if(document.form1.Q2.length) { flag = 1; var i; for(i = 0; i < document.form1.Q2.length; i ++){ if(document.form1.Q2[i].checked){ flag = 0; break; } } } if(flag){ window.alert('Q2が選択されていません'); return false; } else{ return true; } }

  • お問い合わせフォームを作成しているのですがジャバがうまく動いてくれません。

    お問い合わせフォームを作成しているのですが(phpとscriptです)、 script部分がうまく動いてくれません。 必須項目が名前、ふりがな、ラジオボタンで選択項目3つあります。 名前、ふりがな部分を入力せずに送信を押すとアラートがなりますが、 ラジオボタン部分がIEでは一つも選択しないとアラートが正常に機能しますが、ファイヤーフォックスでは送信されてしまいます。 下記にscript部分をコピペしておきますのでお気づきの点がありましたら教えて下さい。 <script LANGUAGE="javascript"> function CheckInput(){ /*チェック項目*/ var object = document.form_1.name.value; if(object == ""){ alert("お名前を入力してください"); return false; } /*チェック項目*/ var object = document.form_1.furigana.value; if(object == ""){ alert("ふりがなを入力してください"); return false; } /*チェック項目*/ var check_flag = 0; //チェックボックスの配列の数だけループ(1個目の配列チェック) for(var i = 1 ;i <= 3 ;i++){ //1個以上のチェックがあればフラグを変更 if(document.all("renraku["+i+"]").checked == true){ check_flag = 1;} } //フラグが0なので1個以上のチェックが無い if(check_flag == 0){ alert("ご連絡方法を選択して下さい") return false; } } </script> また、script部分ではなく、他の原因等が考えられましたら教えていただきたく思います。 宜しくお願い致します。

  • ラジオボタンのチェックが外れた時に、イベントを発生させることはできますか?

    例えば、以下のようにラジオボタンが3つあって、 <input type="radio" name="color"> 赤 <input type="radio" name="color"> 青 <input type="radio" name="color" onXxx="check()"> 黄 黄がチェックされた時と、チェックが外れた時に、動作するイベントハンドラって可能ですか? ↓check関数の例 function check() {  if (略) {   alert('「黄」がチェックされました');  } else {   alert('「黄」がチェックが外れました');  } } onchangeも、onfocus+onblurも、微妙な動きになってしまいます。 やはり、全てのラジオボタンの要素にclickイベントハンドラ追加してやらないといけないのでしょうか?