2017-01-06 14 views
2

Ich habe solche jQuery-Code und haben Probleme mit dem Löschen von Intervallen.clearInterval funktioniert nicht | 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); 
}); 

Ich versuche, diese Arbeit für fast 5 Stunden ohne Ergebnisse zu bekommen. Sowohl clearInterval(counter); als auch clearInterval(winner) funktionieren nicht und überfluten meinen Server mit Requets. Vielen Dank im Voraus für jede Hilfe.

+0

Enthalten Sie alle relevanten Code in OP. [MCVE] (http://stackoverflow.com/help/mcve) lesen – guradio

+0

Die Intervall-ID, die von 'setInterval' zurückgegeben wird, sollte an' clearInterval' übergeben werden. Beispiel: 'var interval = serInterval (myFun, 1000);', um das Intervall 'clearInterval (Intervall) zu löschen;' – Tushar

+0

es wird übergeben, funktioniert aber nicht wie es sollte –

Antwort

3

Mal sehen, wie Sie das Intervall löschen.

clearInterval(winner) 

wo, winner ist die Funktion. Um das Intervall zu löschen, sollte die ID des Intervalls als Parameter übergeben werden.

Wenn das Intervall einstellen, fangen das Intervall ID in eine Variable

winnerInterval = setInterval(winner, 3000); 

und verwenden diese variable Intervall zu löschen.

clearInterval(winnerInterval); 

Stellen Sie sicher, dass beim Löschen des Intervalls die Variable mit der Intervall-ID im Gültigkeitsbereich enthalten ist.

Siehe clearInterval.

Verwandte Themen