0

我有一个网络表单,用户通过下拉列表回答问题,我希望根据他们的回答提供其他问题。

例如,如果您的企业有营业场所,请询问营业时间。如果他们不这样做,请显示他们经营的地区。

随着我添加到流程中的每个问题,代码变得越复杂。许多 if/then 函数并不总是具有互斥的答案。

虽然每个用户可能只需要回答 5-10 个问题,但可能的问题数量可以是100+

有没有一种简单的方法来生成 Javascript/PHP 或至少是伪代码,它可以让您绘制一条通过所有可用答案的路径,并为您生成相关的嵌套 if/then 语句?

示例:Akinator根据之前的答案猜测电视角色。

期待某些响应,当然不必对页面进行编码,以便在一页上回答所有问题,但我想知道它是否至少是可能的。

提前致谢。我希望你们都喜欢 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

我不会考虑生成大量代码,而是考虑避免大量代码。

如果您有所有可能问题的列表,并且您知道哪些是“开始”问题,那么您需要了解的每个问题是:

  • 问题(文本)
  • 问题的“名称”;换句话说,当你积累答案时,记账的一些关键
  • 可能的答案(“是”/“否”或选项列表)
  • 对于每个可能的答案,下一个要问的问题的身份

有了它,您只需要一段知道如何提出问题并根据答案采取行动的代码。当它从用户那里获取答案时,它应该将答案累积在一个列表中。你甚至可以提供一个导航方案来让用户倒退。

于 2011-06-06T17:19:59.133 回答