2017-01-06 70 views
2

我有這樣的jQuery代碼,並有清除間隔的問題。clearInterval不工作| undefined

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)都不能正常工作,並且用服務器淹沒我的服務器。 在此先感謝您的幫助。

+0

在OP中包含所有相關的代碼。閱讀[MCVE](http://stackoverflow.com/help/mcve) – guradio

+0

由'setInterval'返回的間隔Id應傳遞給'clearInterval'。例如:'var interval = serInterval(myFun,1000);',然後清除間隔'clearInterval(interval);' – Tushar

+0

它被傳遞但不能像它應該工作 –

回答

3

讓我們來看看你是如何清除間隔。

clearInterval(winner) 

其中,winner是函數。要清除間隔,間隔的ID應作爲參數傳遞。

當設置間隔,捕捉間隔ID在變量

winnerInterval = setInterval(winner, 3000); 

和使用該變量,清除時間間隔。

clearInterval(winnerInterval); 

清除間隔時,確保包含間隔ID的變量在範圍內。

請參閱clearInterval