• ベストアンサー

設問をいくつか答えてその答えごとにページを変える。

NO.255393の方と少し似たような設問で恐縮です。 やっとHTMLを一通り理解し、現在少しずつJavaSkriptを勉強中です。 いくつかのイエス、ノーの質問を設けてその選択によって見せるページを変えるという風にしたいのですが、具体的に表すと、                     え.html      あ.html    質問4<      お.html 質問1<      質問3<      質問5<          質問2<      う.html    か.html           い.html と、いった感じなのですが。(わかりにくかったらすみません) 「if confirm」の構文を繰り返して、「location.href」で各ページをロードするのは分かりますが、組み方が悪いのか、なかなかうまく作動しません。 どうか、ご教授願います。

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

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

提示されている質問の流れでは、どの質問も、どちらかの選択肢がHTMLに直結しているので、次のような単純なロジックで実現できます。(IE5.5、NN4.7、NN6.2 動作確認済み) <HTML> <HEAD> <TITLE>回答内容で分岐</TITLE> <SCRIPT language="JavaScript"><!-- function ask() {   var page;   if (confirm("質問1") == true) page = "A.html";   else if (confirm("質問2") == false) page = "B.html";   else if (confirm("質問3") == false) page = "C.html";   else if (confirm("質問4") == true) page = "D.html";   else if (confirm("質問5") == true) page = "E.html";   else page = "F.html";   location.href = page; } //--></SCRIPT> </HEAD> <BODY onLoad="ask()"></BODY> </HTML> ※HTML名が「あ.html」とかだと、NN4.7 でうまく動作しなかったため、英字に変えました。 これが、「質問1でYesを選ぶと質問2で、Noを選ぶと質問3」という具合だと、もう少し複雑になってきます。 さらに、「質問4でNoを選ぶと、質問1に戻る」など、複雑なロジックを組む場合、if 文の羅列では厳しくなります。 このようなケースも考慮に入れる場合、「質問文、Yesの時の処理、Noの時の処理」を1セットにして定義すると、簡単に質問の流れなどをコントロールすることができます。 (以下サンプル。IE5.5、NN4.7、NN6.2 動作確認済み) <HTML> <HEAD> <TITLE>回答内容で分岐2</TITLE> <SCRIPT language="JavaScript"><!-- var q = new Array( //        質問文, Yesの処理, Noの処理(各処理には、HTML名か、次の質問番号を書く)   new Question("質問0", "A.html", 1),   new Question("質問1", 2, "B.html"),   new Question("質問2", 3, "C.html"),   new Question("質問3", "D.html", 4),   new Question("質問4", "E.html", "F.html") ); // 質問文と、Yes/Noの処理をセットにする関数(オブジェクト生成) function Question(m,y,n) {   this.message = m;   this.y = y;   this.n = n; } // 変数 q の定義通りに、質問 - 回答処理を行う関数 function ask() {   var req = 0;   while (1) {     // req には、次の質問番号か、HTML名が入る     req = confirm(q[req].message) ? q[req].y : q[req].n;     // req がHTML名(数値でない)なら、ループを抜ける     if (isNaN(req)) break;   }   location.href = req; } //--></SCRIPT> </HEAD> <BODY onLoad="ask()"></BODY> </HTML> ※配列の都合で、質問は0からにしました。 ※見やすさのため、ソースには全角スペースを入れていますので、コピーする際は半角スペースかタブに変換して下さい。

参考URL:
http://tohoho.wakusei.ne.jp/js/index.htm
la_erhu_de
質問者

お礼

質問のような単純な(苦笑)例ばかりでなく、 応用的な内容の回答まで頂けて感謝しております! ご紹介いただいたページも参考にして leaz024さんのお教えいただいた内容を 少しずつ自分で消化していきたいと思います。 ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • meke2
  • ベストアンサー率41% (16/39)
回答No.1

こんばんわ! ----------------------------------------------------------- aa=confirm("質問1の文章") if(aa==false){    bb=confirm("質問2の文章")    if(bb==true){       cc=confirm("質問3の文章")       if(cc==tlue){          dd=confirm("質問4の文章")          if(dd==false){             ee=confirm("質問5の文章")             if(ee==true){location.href='か.html'}             else {location.href='お.html'} ;          }else {location.href='え.html'} ;       }else {location.href='う.html'} ;    }else {location.href='い.html'} ; }else {location.href='あ.html'} ; ----------------------------------------------------------- 多分こんな感じになると思います。 質問より分岐するところで上に行く方を『true』下に行く方を『false』として 上のを作ってみましたが‥‥あってるかどうか試してないです(汗) あと‥‥else の行の { } 要らないかもしれませんが。一応。

la_erhu_de
質問者

お礼

早速のご回答をありがとうございます! まだmeke2さんの方法をそのままコピー&ペーストでは いつまでたっても覚えられないので、 ゆっくりと構文を理解してから実際に試してみます。

すると、全ての回答が全文表示されます。

関連するQ&A