clearInterval不工作|未定义

时间:2017-01-06 03:43:34

标签: javascript jquery

我有这样的jQuery代码,并且在清除间隔方面存在问题。

    var secs = 50, width = 100; 
    var counter = function() {
    if(secs > 0) {
        secs--;
        width = width - 2;
        $('#time').css('width', width + '%').attr('aria-valuenow', width);
        $('.seconds').html(secs);
    } else if(secs == 0){
        $('.questions').addClass('hidden');
        $('.results').removeClass('hidden');
        clearInterval(counter);
        setInterval(winner, 3000);
    }
};
var winner = function() {   
    $.ajax({
        type: "POST",
        url: "ajax.php",
        data: {
            func: "game_results"
        },

        error: function() {
            swal("Błąd", "Serwer nie odpowiada, spróbuj ponownie", "error")
        },
        success: function(data) {

            if (data == "you") {
                $('.waiting').addClass('hidden');
                $('.you').removeClass('hidden');                    
            } else if (data == "opponent") {
                $('.waiting').addClass('hidden');
                $('.opponent').removeClass('hidden');               
            }
        }
    });
    console.log(clearInterval(winner)); // heer
}

function answer(question_id, answer, question) {
    var question_higher = question_id + 1;

    $.ajax({
        type: "POST",
        url: "ajax.php",
        data: {
            func: "play",
            answer: answer,
            question: question
        },

        error: function() {
            swal("Błąd", "Serwer nie odpowiada, spróbuj ponownie", "error")
        },
        success: function(data) {

            if (data == "wrong") {
                $.playSound('build/sounds/wrong');
                $('*[data-question="' + question_id + '"]').find('.' + answer + '').removeClass('btn-primary').addClass('btn-danger');
                $('*[data-question="' + question_id + '"]').find('.col-sm-12').addClass('dimmed');
                setTimeout(function() {
                    $('*[data-question="' + question_id + '"]').addClass('hidden');
                    $('*[data-question="' + question_higher + '"]').removeClass('hidden');
                }, 750);
            } else if (data == "correct") {
                $.playSound('build/sounds/correct');
                $('*[data-question="' + question_id + '"]').find('.' + answer + '').removeClass('btn-primary').addClass('btn-success');
                $('*[data-question="' + question_id + '"]').find('.col-sm-12').addClass('dimmed');
                setTimeout(function() {
                    $('*[data-question="' + question_id + '"]').addClass('hidden');
                    $('*[data-question="' + question_higher + '"]').removeClass('hidden');
                }, 750);
            }
        }
    });

    if(question_id == 5) {
        clearInterval(counter);
        setTimeout(function() {
        //$('.questions').addClass('hidden');
        $('.results').removeClass('hidden');
        }, 750);
        setInterval(winner, 3000);      
    }

}

$(document).ready(function() {
    $('*[data-question="1"]').removeClass('hidden');
    setInterval(counter, 1000);
});

我试图让这项工作将近5个小时没有结果。 clearInterval(counter);clearInterval(winner)都无法正常工作,并使用requets充斥我的服务器。 提前感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

让我们看看你是如何清除间隔的。

clearInterval(winner)

其中,winner是函数。要清除间隔,应将间隔的ID作为参数传递。

设置间隔时,请在变量中捕获间隔ID

winnerInterval = setInterval(winner, 3000);

并使用此变量清除间隔。

clearInterval(winnerInterval);

清除间隔时,确保包含间隔ID的变量在范围内。

请参阅clearInterval