- ベストアンサー
if をいくつか重ねたら実行してくれません
function incheckの中に、5つほどifを重ねてみました。条件に合わないとアラーとをだします。選択はラジオボタンで行っています。 条件に合わないと各々それに応じたアラートがでるところまではなんとか出来ましたが、 2回目に選択しなおして、かつそれが再度すべての条件にあっていないにもかかわらず、OKとされてしまいます。 一度ひとつのif条件にあったことをしてしまうと、そのif条件は2度目からチェックしてくれません。 どうすれば、つどつど全部のif条件をチェックしてくれるでしょうか? 尚、こちらにタグを貼ろうとしたら、質問の欄は文字制限があるようで、ちょっとオーバーしてしまいました。 どなたかが回答してくださったら、すぐに補足欄にはらさせていただきます。 あいまいな質問で申し訳ないのですが、どなたかよろしくご指導願います。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ひとつづつ必ず選んで、順位付けをするようにするのでしょうか。 それで、一度りんごを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にします。 もっとスマートな方法があるかもしれませんが、とりあえずお試しください。
その他の回答 (2)
- leaz024
- ベストアンサー率75% (398/526)
チェックが外れた時に、変数を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 が動いて、チェックをしてくれます。
お礼
ありがとうございました。 せっかく私にあったJavaさんを書いていただいたのですが、 まだJavaを始めて1週間の私にはちょっと難しかったです。 今回はmadmanさんの方を参考にさせていただきますが、 今後の課題としてleazさんのがわかるようになりたいです。 ありがとうございました
- madman
- ベストアンサー率24% (612/2465)
回答できるかわかりませんが、とりあえずソースを見せてください。
補足
<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> こんなのです。よろしくおねがいします。。。。(ちゃんと動くかな???)
お礼
でけました。ありがとうございました。 とてもわかりやすかったです。 遅い時間にすばやく対応頂きまして助かりました。 ありがとうございました。
補足
>ひとつづつ必ず選んで、順位付けをするようにするのでしょうか。 >それで、一度りんごを1位にして、みかんを1位に選びなおすとりんごの未チェック>が判定できない。ということでしょうか。 そうです。まさにそうです。 >これは、チェックが外れたときにfalseにならないせいですね。 そうか!そうすればいいのかー。 >それだと、このようにしてはいかがですか。 はい、さっそくやってみたいのですが、退社時間がきてしまいました。 自宅に帰ってから、再度挑戦いたします。 ひょっとしたらお礼が月曜になってしまうかもしれませんが、 申し訳ないのですが、少々お待ちくださいませ。 本当にありがとうございました。やってみまーす!