2016-04-12 20 views
0

Ich bin neu in JQuery und Javascript, ich versuche, eine kleine SetTimeout-Funktion zu schreiben, aber es scheint nicht zu funktionieren. Unten ist mein Code, kann jemand helfen, indem er darauf hinweist, was hier falsch ist.Javascript SetTimeout-Funktion mit JQuery

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>countdown</title> 
    <script type="text/javascript" src="/jquery-2.1.4.js"></script> 
    <script> 
    $("#submit").click(function(){ 
     var timeVal = $("#input").val(); 
     var mainTimeVal = timeVal.split(":"); 
     var minute = parseInt(mainTimeVal[0]); 
     var second = parseInt(mainTimeVal[1]); 
     //console.log(second); 

     setTimeout(function() { 

      if (minute == 0 && second == 0) { 
       alert("no time left"); 
      } 
      else if (second !== 0) { 
       second--; 
      } 
      else { 
       minute--; 
       second = 60; 
      } 
      second--; 
     }, 1000); 
    }); 
    </script> 
</head> 
<body> 
    <input type="text" id="input" value="25:23"/><br> 
    <button type="button" id="submit" value="send"></button> 
</body> 
</html> 

Antwort

1

Der Code führt auf .click auf der submit Taste - die es nur bedeutet, wird ausgeführt, wenn Sie auf die Schaltfläche klicken. Auch mit setTimeout werden Sie nur einmal ausgeführt, und durch die innere Logik der Funktion scheint es, dass Sie wollen, dass es fortlaufend ist. Ersetzen Sie setTimeout zu setInterval, damit es weiter läuft. .

`$ ("# Eintragen") klicken (function() {var timeval = $ ("# input") val(); var mainTimeVal = timeVal.split (""); var Minute = parseInt (mainTimeVal [0]); var Sekunde = parseInt (mainTimeVal [1]); //console.log (zweiten);

setInterval(function() { 

     if (minute == 0 && second == 0) { 
      alert("no time left"); 
     } 
     else if (second !== 0) { 
      second--; 
     } 
     else { 
      minute--; 
      second = 60; 
     } 

     $('#input').val(minute + ':' + second); 
    }, 1000); 
});` 
+0

ich tat, aber es scheint nicht zu funktionieren, wenn es für Sie arbeitet, können Sie pls eine Geige produzieren? @Velimir – Pappy

+0

um genau zu sein, wollen Sie, dass der Timer weiter zählt, nachdem Sie 'submit' gedrückt haben und nachdem die Zeit verstrichen ist, möchten Sie den Alarm korrekt auslösen? –

+0

ja genau, ich habe setTimeout durch setInterval ersetzt, die Zeit zählt runter, aber das Intervall ist "Sekunden, aber ich will es um 1 Sekunde verfallen lassen. @Velimir – Pappy

0

ich habe Ihren Code leicht modifiziert und erstellt eine Geige : JsFiddle

$("#submit").click(function(){ 
    var timeVal = $("#input").val(); 
    var mainTimeVal = timeVal.split(":"); 
    var minute = parseInt(mainTimeVal[0]); 
    var second = parseInt(mainTimeVal[1]); 

    setTimeout(function() { 

     if (minute == 0 && second == 0) { 
      alert("no time left"); 
     } 
     else if (second !== 0) { 
      second--; 
     } 
     else { 
      minute--; 
      second = 60; 
     } 
     second--; 

     $('#input').val(minute + ':' + second); 
    }, 1000); 
}); 
0

müssen rekursiven Aufruf zu machen und wieder anrufen ....

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>countdown</title> 
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script> 

</head> 
<body> 
    <input type="text" id="input" value="25:23"/><br> 
    <input type="button" id="submit" value="send"></input> 
    <script> 
    $("#submit").click(function(){ 
     var timeVal = $("#input").val(); 
     var mainTimeVal = timeVal.split(":"); 
     var minute = parseInt(mainTimeVal[0]); 
     var second = parseInt(mainTimeVal[1]); 
     //console.log(second); 

     setTimeout(function() { 

      rece(); 
      function rece(){ 
      if (minute == 0 && second == 0) { 
       alert("no time left"); 
       console.log('no time left') 
      } 
      else if (second !== 0) { 
       second--; 
       console.log('second'); 
       rece(); 
      } 
      else { 
       minute--; 
       second = 60; 
       console.log('minute'); 
       rece(); 
      } 
      second--; 
      } 

     }, 100); 
    }); 
    </script> 
</body> 
</html> 
Verwandte Themen