坚持循环或别的什么?

时间:2014-04-08 13:33:58

标签: javascript jquery loops each

我认为我在循环功能方面犯了一些错误。我有一个测验,我有四个选择。每当我选择答案并点击“nästa”时,它将存储所选答案,但如果他们改变主意并想要取回所有选项,他们可以点击“visa alla alternativ”按钮。为了检查我是否做得对,我已经附加了已出现的问题。每次我点击“nästa”时,都会出现问题的数量。

例如。 1 2 3 4(我点了四次,出现了四个不同的问题)。

但是,如果我点击“visa alla alternativ”,那么这个号码就是这样的。 1 2 3 4 1 2 3 4.这取决于我点击“visa alla alternativ”的次数。

var answer = [];
var select; 

$(".option").on("click", click_question);

function nästa() {

    answer.push(select); 
    count_click();

    $(".option").each(function() {
        $(this).fadeTo("slow", 1);
        $(this).on("click", click_question);
    });

    $(this).fadeTo("slow", 0.2);
    $("#visa_alternativ").fadeTo("slow", 0.2);
    $("#tillbaka_question").fadeTo("slow", 1);

    clicks.length = 1;
}

function click_question() {

        $(".option").each(function() {
            $(this).fadeTo("slow", 0.1);
        });

        $(".option").off("click");

        $(this).fadeTo("slow", 1); 

        $("#visa_alternativ").fadeTo("slow", 1);
        $("#nästa").fadeTo("slow", 1);
        $("#nästa").on("click", nästa);

        select = $(this).text();
}

$("#visa_alternativ").on("click", function () {
            $(".option").each(function() {
                $(this).fadeTo("slow", 1);
            });

            $(".option").on("click", click_question);
            $(this).fadeTo("slow", 0.2);
            $("#nästa").fadeTo("slow", 0.2);
});

该函数以某种方式调用count_click();,其中函数给我们一个随机问题。 count_click();工作正常但如果我点击“Visa alla alternativ”,它会根据我点击“visa alla anlternativ”的次数来调用更多问题。之前我曾对each()做错了,我在这里问了一个问题,但现在我遇到了类似的问题,但有点不同。我需要帮助并告诉我each()函数我做错了什么?

编辑:

好吧,发现如果我把$(“#nästa”)打开(“点击”,nästa);在它正在工作的功能之外,但是当我把它放入函数中时,正如你在上面看到的那样?为什么?

1 个答案:

答案 0 :(得分:0)

看起来你多次绑定click_question函数(这意味着它会多次运行):

$(".option").on("click", click_question); // bound to each .option here
function nästa() {
    answer.push(select);
    count_click();
    $(".option").each(function () {
        $(this).fadeTo("slow", 1);
        $(this).on("click", click_question); // bound again as .each iterates through them.
    });
    $(this).fadeTo("slow", 0.2);
    $("#visa_alternativ").fadeTo("slow", 0.2);
    $("#tillbaka_question").fadeTo("slow", 1);
    clicks.length = 1;
}

要么多次绑定,要么使用.one代替.on