0

ユーザーがドロップダウンを介して質問に回答する Web フォームがあり、その回答に基づいて他の質問を利用できるようにしたいと考えています。

たとえば、あなたのビジネスに施設がある場合は、営業時間について尋ねます。そうでない場合は、営業している地域を示してください。

プロセスに質問を追加するたびに、コードはより複雑になります。相互に排他的な答えが常にあるとは限らない多くの if/then 関数。

各ユーザーは 5 ~ 10 の質問に答えるだけでよい場合がありますが、可能な質問の数は100 以上になる場合があります。

Javascript/PHP、または少なくとも疑似コードを生成して、利用可能なすべての回答のパスをプロットし、関連するネストされた if/then ステートメントを生成する簡単な方法はありますか?

例: Akinatorは、以前の回答に基づいて TV のキャラクターを推測します。

もちろん、特定の回答を見越して、すべての質問に 1 ページで回答できるようにページをコーディングする必要はありませんが、少なくともそれが可能かどうか知りたいです。

前もって感謝します。皆さんが WWDC を楽しんでくれることを願っています ;)

4

2 に答える 2

1

すべてのルールを含むページに json オブジェクトを設定し、各要素に json オブジェクトに対応する id/attribute を設定できます。次に、変更時に、「変更」要素の属性に対応する「トリガー」ノードのjsonオブジェクトをチェックし、その値に基づいて非表示/表示する必要があるすべての要素を見つけます。このコードは非常に大まかで、正確な答えではありませんが、始めるには十分なアイデアであることに注意してください。

<select id='q1' onchange='handleHideShow(this)'></select>
<select id='q2' onchange='handleHideShow(this)'></select>

function handleHideShow(el)
{
    var elValue = el.value;
    if(hsObj[el.id])
    {
       var rules = hsObj[el.id].rules;
       for(var r = 0; r < rules.length; r++)
       {
           var rRule = rules[r];
           for(var t in rRule) 
           { 
               var showEl = document.getElementById(rRule[t]);
               if(showEl)
               {
                    var hideVal = "";
                    if(elValue != t)
                    {
                        hideVal = 'none';
                    }
                    showEl.styles.display = hideVal;
                }
            }
        }
    }               
}
var hsObj = [
   "q1":{"Yes":"q2"}
];
于 2011-06-06T17:22:00.873 に答える
0

多くのコードを生成するという観点ではなく、多くのコードを回避するという観点から考えます。

考えられるすべての質問のリストがあり、どの質問が「開始」質問であるかがわかっている場合、それぞれについて知っておく必要があることは次のとおりです。

  • 質問(テキスト)
  • 質問の「名前」; 言い換えれば、回答を蓄積するための簿記の鍵
  • 可能な答え (「はい」/「いいえ」または選択肢のリスト)
  • 可能な答えごとに、次に尋ねる質問のアイデンティティ

これで、質問を提示して回答に基づいて行動する方法を知っているコードが 1 つだけ必要になります。ユーザーから回答を取得するため、回答をリストに蓄積する必要があります。ユーザーが逆方向に移動できるように、ナビゲーション スキームを提供することもできます。

于 2011-06-06T17:19:59.133 に答える