2012-01-13 47 views
2

基本上,我有一个调查问卷,这是非常动态的&数据驱动的性质......JQuery多维数组或其他方法?

对于每个问题,我可以有一个 题号, 0或多个选项的单选按钮, 0或复选框更多的选择, 然后每个选项的单选按钮,我将有一个 选项ID, 值 并为每个选项复选框,我将有一个 选项ID, 值 并且因为这是一个textarea每个选项我将有一个 选项ID, 值 如果我没有选择,我可以有一个是没有单选按钮组,这将有 问题ID, 值 如果我没有选择我也可以有一个文本,这将有
问题ID, 值

我所拥有的一切使我想要的方式和我的变化,并单击jQuery的事件被射击时我希望他们...

问题在我的JQuery此刻我想揪出一种方法来保存所有这些问题的答案,因为他们被回答,如果他们改变更新或取代我以前存储的...

一旦用户完成了答案和编辑(如适用),我将在我的基于mvc3的解决方案中将jquery/json发布到我的控制器中;如果我能得到我的什么样的Jquery的结构,我需要做到这一点想通了,我好去...

的方法来做到这一点的jQuery是让我头疼所需的结构...

在我想到的是沿着以下线的东西的那一刻...

var $ArrayToPost = []; 

    var $questionare = 
    { 
     Questions: { 
      QuestionNumber: null, 
      Options: [], 
      YesNo: [], 
      TextArea: [] 
     } 
    }; 

    $('input.Questionare, textarea.Questionare').live({ 
     click: function (e) { 
     ...rest omitted for brevity... 
     $questionare.Questions.QuestionNumber = $QuestionNbr; 
     $questionare.Questions.Options.push($CheckBox); 

     $ArrayToPost.push($questionare); 

     ...rest omitted for brevity... 
     change : function (e) { 
     ...rest omitted for brevity... 
    }); 

的问题,我有这种做法是只要单击一个复选框,单选按钮或值的文本改变我不得不弄清楚我已经在结构中添加了适用的问题编号,并更新任何适用的或者只是替换w帽子是适用...

我觉得我在这个复杂,并会把握像一个更优雅的方式......

在此先感谢。

UPDATE:仍然没有想出一个办法让这个打算,希望有人可以帮我在正确的方向前进......

回答

0

我不得不做类似的东西了这一点。 如果您是以应用程序的形式进行操作,并且需要离开该页面......或许看看将答案保存在Cookie中。我会建议一个本地数据库,但似乎本地数据库目前正在播出,前进。

如果你留在同一页面上,那么JavaScript变量或JavaScript窗口变量是一个想法。然后,在onchange事件中,查看先前保存的值以查看该值是否已更改为正确答案等。

如果你正在做的是一个网页而不是一个应用程序,你可以使用php或其他服务器端的东西来存储对象或数组。

0

我认为你需要两个结构。第一个将持有所有的问题和选项,而第二个持有答案。由于您的问题“模板”对于调查的所有参与者都是相同的,因此您可以以JSON格式传递该JS对象,并在需要显示问题和答案组合时使用它。

您使用的第二种结构将仅用于在将它们回发到服务器之前保留答案。见下面我的例子:

首先,保持实际问卷调查对象:

var questionnaire = { 
    Questions : [ 
     { 
      number: 1, 
      type: 'Radio' 
      options: ['Choice 1', 'Choice 2', 'Choice 3'] 
     } 
    ] 
}; 

并在重复对象“的问题:”对于每一个问题。指定一个类型,然后使用你的jQuery代码来创建合适的收音机,复选框,textarea等元素。很显然,在某些情况下,“选项”数组是不需要的(例如textarea)。

对于存储答案,它更容易。只需建立一个阵列并从那里开始。

var answers = [ 

]; 

function recordAnswer(qNum, answer) { 
    answers[qNum] = answer; 
} 

每一个答案记录(可以使用“的onchange”事件)时,调用recordAnswer(),并通过在题号和答案提供。用户更新的任何问题都会自动覆盖之前的答案。

当您准备好POST数据时,只需将对象转换为JSON,并通过适当的jQuery Ajax方法即可。另一方面,如果您需要POST所有内容(包括问题模板),只需遍历可用问题并在answers数组中找到与当前问题相同编号的元素,然后记录答案在第一个对象模板中。然后POST到服务器。

这是一对夫妇的做法。希望其中一个适合你:)

+0

我不是很追随你......我所有的问题都是动态的,我可以有没有单选按钮组,以及单选按钮列表和复选框列表和textareas每个问题我可以在任何给定的时间显示n个可分页的问题...我可以静态定义的数量很少... – user1011144 2012-01-13 16:14:03

+0

我可以看到如何为一个适用的问题添加0个或多个项目的每个单独的数组.. 。但我不知道如何进行说,例如我有一个复选框和0或更多文本区域的列表,例如对于同一个问题;当点击和更改每个事件分别触发...所以说更改事件触发,并选中一个复选框并将其值和问题编号添加到我想发布的过程数组中...然后一些文本是键入一个文本框,是同一问题的一部分...如果我添加相同的问题编号和当前值,我将失去信息。 – user1011144 2012-01-13 16:41:53

+0

我的方法仍然适用于您。当记录你的答案只需要像这样地址你的数组:答案[qNum] ['textarea'] =答案;因此,每个问题的数据结构如下所示:answer = {0:{textarea:“”,radio:“”}}等等。您可能需要在阅读问卷时设置结构,但这应该是微不足道的。 – 2012-01-18 22:17:28