1

我正在做一个移动 html5 / jquery 测验,我将服务器中的所有问题预加载到一个 html 文件中,然后有按钮在问题之间来回移动。效果很好,但现在我需要跳过某些问题,如果此人通过无线电是/否输入问题 20、然后是 21 和 22 回答“否”,则不需要显示。
我怎样才能做到这一点?这是我一直在使用的代码片段:

JSFIDDLE:

http://jsfiddle.net/gN9Xg/

如果此人在问题 1 上回答“否”,则想跳过问题 2

    function doSubmit(obj)
    {
        $(obj).parents(".question").first().next().show();
        $(obj).parents(".question").first().hide();
    }


<div class="question" id="question11" >

<input type="text" name="question11.1" qid="question11" />


<input type=submit id="button"    value="Submit" onclick='doSubmit(this)' />
4

2 回答 2

0

要在对 HTML 进行最小更改的情况下实现这样的事情,您可以设置一个类,例如“skipper”为将导致这种跳过的元素,然后元素值将是一个数字,确定要跳过多少个问题。

例如,要让答案“否”导致跳过,请使用这样的 HTML:

<select name="question1.1" class="skipper">
    <option  name="question1.1" ano="1" qid="question1" value="0" checked/>Yes
    <option  name="question1.1" ano="1" qid="question1" value="1"  />No
</select>

由于您实际上并没有在其他地方使用此值,因此应该没问题。

现在要使用它,请使用这样的代码:

function doSubmit(obj)
 {
    var oQuestion = $(obj).parents(".question").first();
    var skipCount = parseInt(oQuestion.find(".skipper").val(), 10);
    if (isNaN(skipCount) || skipCount < 0)
        skipCount = 0;
    var oNext = oQuestion.next();
    for (var i = 0; i < skipCount; i++)
        oNext = oNext.next();
    oNext.data("prev_index", oQuestion.index());
    oNext.show();
    oQuestion.hide();
}

function backToPrev(obj)
{
    var oQuestion = $(obj).parents(".question").first();
    var index = parseInt(oQuestion.data("prev_index"), 10);
    if (isNaN(index) || index < 0)
        oQuestion.prev().show();
    else
        $(".question").eq(index).show();
    oQuestion.hide();
}

如您所见,代码查找“skipper”值并分配问题的索引以返回。

更新了小提琴

于 2012-10-28T11:02:20.230 回答
0

每个答案都需要一些指示,说明选择它时要做什么。在应该跳过的答案上放置一个data-next属性,并将属性值设置为下一个必填问题的 id。

Now, when an answer is selected check its data-nextattribute, if present set the next question to the selected id otherwise proceed as you now do.

备份也需要进行一些更改。您需要往回跳,直到找到 style.display 不是“none”的问题。

基本思想是使用显示样式设置来指示要回答的问题和data-next答案的属性以选择要回答的问题。

希望这能让你继续。

于 2012-10-28T05:42:07.697 回答