ハマっている「お菓子」を教えて!

NO.255393の方と少し似たような設問で恐縮です。
やっとHTMLを一通り理解し、現在少しずつJavaSkriptを勉強中です。
いくつかのイエス、ノーの質問を設けてその選択によって見せるページを変えるという風にしたいのですが、具体的に表すと、

                    え.html
     あ.html    質問4<      お.html
質問1<      質問3<      質問5<    
     質問2<      う.html    か.html
          い.html

と、いった感じなのですが。(わかりにくかったらすみません)


「if confirm」の構文を繰り返して、「location.href」で各ページをロードするのは分かりますが、組み方が悪いのか、なかなかうまく作動しません。
どうか、ご教授願います。

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/04/20 02:42

こんばんわ!


-----------------------------------------------------------
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 の行の { } 要らないかもしれませんが。一応。
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/04/20 02:37

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