Javascript Pomodoro定时器:变量值变为';楠';

Javascript Pomodoro定时器:变量值变为';楠';,javascript,jquery,Javascript,Jquery,我正试着做一个像波莫多罗钟一样的钟。秒值随机变为NaN,然后在启动“中断”后恢复正常 $('#circle a').click(function() { var timer = $('.time > span').html(); timer = timer.split(':'); var minutes = timer[0]; //Value of minutes var seconds = timer[1]; //Value of seconds va

我正试着做一个像波莫多罗钟一样的钟。秒值随机变为NaN,然后在启动“中断”后恢复正常

$('#circle a').click(function() {
  var timer = $('.time > span').html();
  timer = timer.split(':'); 
  var minutes = timer[0];    //Value of minutes
  var seconds = timer[1];    //Value of seconds

  var settimer = setInterval(function() {
    seconds -= 1;
    console.log(seconds);
    if (seconds < 0 && minutes != 0) {
      minutes -= 1;
      minutes = String(minutes);
      seconds = 59;
    } else if (seconds < 10 && seconds.length != 2)
      seconds = '0' + seconds; 
    if (minutes < 10 && minutes.length < 2) 
      minutes = '0' + minutes;

    $('.time > span').html(minutes + ':' + seconds);

    //Start break when session is completed
    if (minutes == 0 && seconds == 0) {
      $('.upper').find('h1').text('BREAK');
      var time = $('#break').find('span').text();
      $('.time > span').html('0' + time + ':00');
      $('#circle a').trigger("click");  //Start timer for break
    }
  }, 1000);
});
$('#圈a')。单击(函数(){
var timer=$('.time>span').html();
timer=timer.split(“:”);
var minutes=计时器[0];//分钟值
var seconds=计时器[1];//秒的值
var settimer=setInterval(函数(){
秒-=1;
console.log(秒);
如果(秒<0和分钟!=0){
分钟-=1;
分钟=字符串(分钟);
秒=59;
}否则如果(秒<10&&seconds.length!=2)
秒='0'+秒;
如果(分钟<10和分钟长度<2)
分钟='0'+分钟;
$('.time>span').html(分钟+':'+秒);
//会话完成后开始中断
如果(分钟=0和秒=0){
$('.upper')。查找('h1')。文本('BREAK');
变量时间=$('#break').find('span').text();
$('.time>span').html('0'+time+':00');
$('#圈出a')。触发器(“单击”);//启动中断计时器
}
}, 1000);
});
这是代码笔的链接

如何解决NaN问题? 有没有更好的方法来实现这一点?

代码
$(“#圈a”)。触发器(“单击”)//中断启动计时器
递归调用最初执行的函数。此调用在原始计时器进行时启动新计时器

执行新计时器时,原始计时器的
seconds
值变为
NaN
。由于两个计时器,
second
有两个值。原始计时器中的
seconds
值导致出现无法解释的
NaN

注意:两个计时器始终同时运行

最简单的修复方法是在启动新计时器之前停止当前计时器

这是更新后的代码

 $('#circle a').click(function() {
  var timer = $('.time > span').html().split(':');;
  var minutes = Number(timer[0]),
    seconds = Number(timer[1]);

  var settimer = setInterval(function() {
    seconds -= 1;
    if (seconds < 0 && minutes != 0) {
      minutes -= 1;
      seconds = 59;
    } else if (seconds < 10 && seconds.length != 2)
      seconds = '0' + seconds;
    if (minutes < 10 && minutes.toString().length < 2)
      minutes = '0' + minutes;

    $('.time > span').html(minutes + ':' + seconds);

    if (minutes == 0 && seconds == 0) {
      clearInterval(settimer);    //Stop the current timer
      var upper_text = $('.upper').find('h1');
      var time;
      if (upper_text.text() == 'BREAK') {
        upper_text.text('Session');
        time = $('#session').find('span').text();
      } else {
        upper_text.text('BREAK');
        time = $('#break').find('span').text();
      }
      $('.time > span').html(time + ':00');
      $('#circle a').trigger("click");    //Start new timer
    }
  }, 1000);
});
$('#圈a')。单击(函数(){
var timer=$('.time>span').html().split(':');;
var分钟=数量(计时器[0]),
秒=数字(计时器[1]);
var settimer=setInterval(函数(){
秒-=1;
如果(秒<0和分钟!=0){
分钟-=1;
秒=59;
}否则如果(秒<10&&seconds.length!=2)
秒='0'+秒;
if(分钟<10&&minutes.toString().length<2)
分钟='0'+分钟;
$('.time>span').html(分钟+':'+秒);
如果(分钟=0和秒=0){
clearInterval(settimer);//停止当前计时器
var upper_text=$('.upper').find('h1');
var时间;
如果(上_text.text()=='BREAK'){
上_text.text(“会话”);
时间=$(“#会话”).find('span').text();
}否则{
上_text.text('BREAK');
时间=$('#break')。查找('span')。文本();
}
$('.time>span').html(time+':00');
$('#圈出a')。触发器(“单击”);//启动新计时器
}
}, 1000);
});

一些提示:在没有第二个参数(
10
)的情况下,不要使用
parseInt
。使用
.toString()
代替
字符串(
。全程使用数字:
var分钟=数字(计时器[0]),秒=数字(计时器[1])
,使用
.html
函数编写新计时器时,仅追加前导的
0
或转换为字符串。@Xufox感谢您的输入。修复了代码。@Xufox我应该在解决问题后删除该问题吗?我是个新手。因此,请提出建议。@Ibrahim So的目的是为comunity发布的问题提供一个未来参考,以便有助于解决开发人员的问题,因此您必须让您的问题存在以供将来参考。@Xufox将您的评论转换为答案不是更好,因为它回答了问题?