首页 > 解决方案 > 通过两个函数改变值

问题描述

我有改变值变量的函数totalTime
当我使用第一个函数值等于189 - 50(139)。
使用第二个函数后,我想收到current value - 8 (131) 但我有189 - 8.
我究竟做错了什么?

let totalTime = 189;  // *

function calcTime(){

  let hours     = Math.trunc(totalTime/60);
  let minutes   = totalTime % 60;
  let formatted = hours + 'h ' + minutes + 'm';
  
  fullTimeDefault.innerHTML = formatted;
}

function workTimeDecrease() {
  if(valueElem[0]) {
    if (+valueElem[0].innerHTML === 15) {
      return false
    } else{
      valueElem[0].innerHTML = parseInt(valueElem[0].innerHTML, 10) - step;
    }
    for(i = 0; i < barElem.length; i++) {
      barElem[i].style.width = parseInt(valueElem[0].innerHTML, 10) + '%';
    }
    totalTime -= 50 // (1!)
  }
}

function shortBreakDecrease() {
  if(valueElem[2]) {
    if (+valueElem[2].innerHTML === 3) {
      return false
    } else {
      valueElem[2].innerHTML = parseInt(valueElem[2].innerHTML, 10) - step;
    }
    for(i = 0; i < barElem2.length; i++) {
      barElem2[i].style.width = parseInt(valueElem[2].innerHTML, 10) + '%';
    }
    totalTime -= 8  // (2!)
  }
}

elem.onclick = function(event) {
      
      if (event.target.closest('.down-time')) {
        workTimeDecrease();
        calcTime();
      } else if (event.target.closest('.up-time')) {
        workTimeIncrease();
        calcTime();
      }

      if (event.target.closest('.down-short-break')) {
        shortBreakDecrease();
        calcTime();
      } else if (event.target.closest('.up-short-break')) {
        shortBreakIncrease();
        calcTime();
      }
}

标签: javascript

解决方案


我的想法是,这条线没有将 totalTime 分配给您的输出,尽管它正在内部进行修改(“步骤”也没有在任何地方定义)

valueElem[0].innerHTML = parseInt(valueElem[0].innerHTML, 10) - step;

也许如果你在步骤中传递 50 然后在 2 个调用中传递 8 个(更改标题以作为参数):

function workTimeDecrease(int step) {
function shortBreakDecrease(int step) { ...

改变:

valueElem[0].innerHTML = parseInt(valueElem[0].innerHTML, 10) - step;
...
valueElem[2].innerHTML = parseInt(valueElem[0].innerHTML, 10) - step;

至:

valueElem[0].innerHTML = totalTime - step;
...
valueElem[2].innerHTML = totalTime - step;

并将两个 totalTime 分配更改为:

totalTime -= step;

您还可以在分配 totalTime 后立即向控制台发出警报或日志,以确保这不是问题(或全部结束,有助于检查值 - 我广泛使用这些值进行调试,有时是每一行)。


推荐阅读