Nějaký způsob, jak vygenerovat javascript nebo pseudo kód pro tok dat?

Mám webový formulář, kde uživatelé odpovídají na otázky pomocí rozbalovacích nabídek, a chci zpřístupnit další otázky na základě jejich odpovědí.

např. pokud má vaše firma provozovnu, zeptejte se na otevírací dobu. Pokud ne, ukažte regiony, ve kterých působí.

S každou otázkou, kterou do procesu přidám, se kód stává složitějším . Mnoho funkcí if/then, které se ne vždy vzájemně vylučují.

I když každý uživatel může odpovědět pouze na 5–10 otázek, počet možných otázek může být 100+ .

Existuje jednoduchý způsob, jak vygenerovat buď Javascript/PHP, nebo alespoň pseudo kód, který vám umožní vykreslit cestu přes všechny dostupné odpovědi a vygeneruje pro vás příslušné vnořené příkazy if/then?

Příklad:Akinator hádá televizní postavy na základě předchozích odpovědí.

V očekávání určitých odpovědí stránka samozřejmě nemá být kódován tak, aby všechny otázky byly zodpovězeny na jedné stránce, ale chci vědět, jestli je to alespoň možné.

Díky předem. Doufám, že se vám všem bude WWDC líbit 😉

Odpověď

Na stránce můžete nastavit objekt json, který obsahuje všechna pravidla a na každém prvku má id/atribut, který odpovídá objektu json. Poté při změně zkontrolujete objekt json, zda neobsahuje uzel „spouštěč“, který odpovídá atributu prvku „změna“, a poté vyhledejte všechny prvky, které by měly být skryty/zobrazeny na základě této hodnoty. Všimněte si, že tento kód je opravdu hrubý a není přesná, ale dostatečně nápaditý, abyste mohli začít.

<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"}
];