基本上,我所拥有的是一份非常有活力的调查问卷。数据驱动本质上......
对于我可以拥有的每个问题 问题编号, 0个或更多单选按钮选项, 0个或更多选项的复选框, 然后对于每个选项单选按钮,我将有一个 选项ID, 值 对于每个选项复选框,我将有一个 选项ID, 值 对于每个选项,我将有一个textarea 选项ID, 值 如果我没有选项,我可以有一个是没有单选按钮组,这将有一个 问题ID, 值 如果我没有选择,我也可以有一个textarea,这将有一个 问题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...
});
我用这种方法的问题是,无论何时单击复选框,单击单选按钮或在文本区域中更改值,我都必须弄清楚我已经添加到适用的问题编号的结构中,并更新任何内容是适用的或只是替换适用的......
我认为我过于复杂,并且确实会像一种更优雅的方法......
提前感谢。
更新:还没有想出办法来实现这一目标,希望有人能让我朝着正确的方向前进......
答案 0 :(得分:0)
我必须做一些类似的事情。 如果你是作为一个应用程序,并需要离开该页面...也许看看在cookie中保存答案。我建议使用一个本地数据库,但现在看来本地数据库已经在空中播出了。
如果你停留在同一个页面上,那么javascript变量或javascript窗口变量就是一个想法。然后,在onchange事件上,查看以前保存的值以查看值是否已更改为正确答案等。
如果您将其作为网页而非应用程序进行,则可以使用php或服务器端存储对象或数组。
答案 1 :(得分:0)
我认为你需要两种结构。第一个将保留所有问题和选项,而第二个将保留答案。由于您的问题“模板”对于调查的所有参与者都是相同的,因此您可以以JSON格式传递该JS对象,并在需要显示问题和答案组合时使用它。
您使用的第二个结构仅用于在将它们发回服务器之前保留答案。请参阅下面的示例:
首先,持有实际问卷的对象:
var questionnaire = {
Questions : [
{
number: 1,
type: 'Radio'
options: ['Choice 1', 'Choice 2', 'Choice 3']
}
]
};
并在每个问题的“问题:”中重复该对象。指定一个类型,然后使用您的jQuery代码创建适当的radio,checkbox,textarea等元素。显然在某些情况下不需要“选项”数组(例如textarea)。
为了存储答案,它更容易。只需构建一个数组并从那里开始。
var answers = [
];
function recordAnswer(qNum, answer) {
answers[qNum] = answer;
}
每次记录答案(您可以使用“onchange”事件),请调用recordAnswer()并传入问题编号和提供的答案。用户更新的任何问题都将自动覆盖以前的答案。
当您准备POST数据时,只需将对象转换为JSON,并通过相应的jQuery Ajax方法。
另一方面,如果你需要发布所有东西(包括问题模板),只需循环查看可用的问题,并在答案数组中查找与当前问题编号相同的元素,并记录答案。第一个对象模板。然后POST到服务器。
这有几种方法。希望其中一个适合你:)