2011-06-06 38 views
0

我有一个网页表单,用户通过下拉菜单回答问题,我希望根据他们的回答提出其他问题。任何方式为数据流生成JavaScript或伪代码?

例如如果你的企业有一个场所,然后问开放时间。如果他们不显示他们所在的区域。

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

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

有没有产生任何的JavaScript/PHP或至少是伪代码,它可以让您完成所有可用的答案绘制路径的简单方法及其产生的相关嵌套的if/then你发言?

例子:Akinator猜测基于以前的答案电视剧中的人物。

在预期某些回应,当然页面不编码,以便所有问题都在一个页面上回答,但我想知道它是否至少有可能。

在此先感谢。我希望你们都喜欢WWDC;)

+0

'有没有一种简单的方法来生成Javascript/PHP或至少伪代码'我会告诉你,这可能会被过度简单化,但你最好的选择是 - >一支铅笔和几张白纸。写下应用程序应该做什么,然后再担心它将如何执行此操作。 (实施)。 – stefgosselin 2011-06-06 17:19:32

回答

1

您可以设置一个包含所有的规则,每个元素在页面上一个JSON对象必须对应于JSON对象的ID /属性。然后在更改时检查json对象是否有与“change”元素的属性对应的“trigger”节点,然后根据该值查找应该隐藏/显示的所有元素。注意这段代码真的很粗糙,并不是一个确切的答案,但足以让你开始。

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

赞赏,谢谢。 – 2011-06-07 07:23:35

0

而不是在产生很多代码方面思考,我认为在方面避免很多代码。

如果你有所有可能的问题清单,你知道哪些是“开始”的问题,那么你需要知道他们每个人是什么:

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

因此,您只需要知道如何提出问题并对答案采取行动的一段代码。它应该将答案累积在列表中,因为它可以从用户那里获得答案。您甚至可以提供导航方案以允许用户倒退。