JavaScript函数滞后一个周期,并获得NAN



我已经离开编写我一直很忙的代码,但是我没有停止从事程序。它是很多代码,因此我将其制成了代码epen。这是链接:

https://c* depen.io/animalzero/pen/jaerjq

我知道它说您必须输入Codepen(冗余)伴随的代码,但是仅JavaScript是330 HTML,并且CSS也是数百行,我是否必须在每行4次登上太空栏?ugh技术。

现在,我已经从中遇到了大部分错误(自8月以来,我一直在编码JS,我从事交易中的工作)。我真的很喜欢JS的算法脚本部分,而我的程序可以做到。

我在这里遇到的问题是,实际的hoursf()函数应该在模拟的小时内进行计算,并在模拟框中给您一个值。我想我在做一些愚蠢的事情。当您单击"计算"按钮时,它会填充模拟总计,但是我在该按钮上有多个事件侦听器,而实际hoursf()是其中之一。如果再次单击按钮,则MATEA HOURSF()函数添加了SIM卡总计,但是到那时,我的其他功能正在用不符合实际的总数匹配的新数据来填充表格。它落后一个周期。如果有人可以帮助我,我真的很高兴。

另一个问题是我有时会在SIM卡中获得Nan。我注意到它只有在newendtime()产生正面整数时才发生。NewendTime基本上需要在EndTimeEntry中输入的结束时间,并随机添加或减去0和3之间的数字,从而给出模拟时间。我还应该提到,Newstarttime为StartTimeEntry做同样的事情。我的" ClearUpxxx"功能可以从基本10数学来进行,并在某些条件下减去40个基础数学,并在其他条件下单独使用。其中有4个,其中两个用于手动输入时间,其中两个用于所提出的模拟时间。另外,底部有一个函数,称为" newsimstart",其目的是从第2行开始,并在上一个迭代中的结束时间覆盖模拟的开始时间(非常酷的嗯:tilly_smile它更现实。提前感谢我知道它的大量代码,而且写得不太好。另外,我知道我不应该这样做,但我很懒惰。谢谢!

ps我可以根据需要提供更多信息。我将其发布在免费的代码训练营中,但是该线程将其连接到两个月大的死线,以便我向你们寻求帮助。

真相,您的代码有很多问题。重复大量它,有些功能无需做任何事情,变量无处可去。重要而不是重复整个大规模代码块。但这不是https://codereview.stackexchange.com,所以我会坚持主要错误。

主要问题在于您正在将几个异步事件侦听器连接到点击处理程序。因为它们异步,所以他们可以按任何顺序运行,所以请。因此,执行某些功能所需的某些功能不可用。解决此问题的最简单方法只是制作一个事件处理程序,然后按照您希望的顺序运行功能。确实,该代码应该更好地结构和分离,但是NAN问题仅通过整合所有内容就可以解决。

编辑:

只是注意到一个很大的错误也是,您的代码的两行是错误的方式。奇怪的命名wooHoo变量是在设置之前尝试引用remainingMinutes

var wooHoo = remainingMinutes + bigNoRemainder;
var remainingMinutes = startingMinutes % 100;

,但同样,您也可以更改此信息:

var hundreds3 = startingMinutes / 100;
var noRemainder = Math.floor(hundreds3);
var bigNoRemainder = noRemainder * 60;
var wooHoo = remainingMinutes + bigNoRemainder;
var remainingMinutes = startingMinutes % 100;
var secondHalf = (remainingMinutes / 100) * 60;
var eleFun = secondHalf + bigNoRemainder
var superMinutes = remainingMinutes / 60;
var whatEvs = secondHalf + sixties;
simActual[i].value = (wooHoo / 60).toFixed(2);

...更光滑的东西:

var bigNoRemainder = Math.floor(startingMinutes / 100) * 60;
var remainingMinutes = startingMinutes % 100;
simActual[i].value = ((remainingMinutes + bigNoRemainder) / 60).toFixed(2);

我还想展示您如何掌握整个actualHoursF功能,而使用的行数量是一半,同时仍然可以阅读:

function actualHoursF() {
  for (var i = 0; i < simActual.length; i++) {
    if (startTimeEntry[i].value !== "") {
      var startingMinutes = simEnd[i].value - simStart[i].value;
      var remainingMinutes = startingMinutes % 100;
      var noRemainder = Math.floor(startingMinutes / 100);
      var bigNoRemainder = Math.floor(startingMinutes / 100) * 60;
      var totalMinutes = (noRemainder * 60) + remainingMinutes;
      if (startingMinutes < 60) {
        simActual[i].value = (startingMinutes / 60).toFixed(2);
      }
      else if (startingMinutes > 100 && startingMinutes < 130) {
        simActual[i].value = ((remainingMinutes / 60) + noRemainder).toFixed(2);
      }
      else if (startingMinutes > 130) {
        simActual[i].value = ((remainingMinutes + bigNoRemainder) / 60).toFixed(2);
      }
      else {
        simActual[i].value = (totalMinutes / 100).toFixed(2);
      }
    }
  }
}

错误固定代码:

除了某种从未被调用的函数的格式和删除外,我的代码大部分相同:

var workOrderEntry = document.querySelectorAll(".workOrder");
var startTimeEntry = document.querySelectorAll(".startTime");
var endTimeEntry = document.querySelectorAll(".endTime");
var hoursTotal = document.querySelectorAll(".totalHours");
var simStart = document.querySelectorAll(".simStart");
var simEnd = document.querySelectorAll(".simEnd");
var simActual = document.querySelectorAll(".simActual");
var calc = document.querySelector("#calculate");
var moreLines = document.querySelector("#moreLines");
var tableRow = document.querySelector(".row");
var bigTotal = document.querySelector(".bigTotal");
var bigActual = document.querySelector(".bigActual");
/*----------------------------------------------------*/
function totalCalc() {
  var smallTotal = 0;
  for (i = 0; i < hoursTotal.length; i++) {
    var numberU = parseFloat(hoursTotal[i].value, 10);
    if (hoursTotal[i].value != 0) {
      smallTotal += numberU;
      bigTotal.value = smallTotal + " rough hours";
    }
  }
}
function actualCalc() {
  var smallActual = 0;
  for (i = 0; i < simActual.length; i++) {
    var numberW = parseFloat(simActual[i].value, 10);
    if (simActual[i].value != 0) {
      smallActual += numberW;
      bigActual.value = smallActual.toFixed(2) + " actual hours";
    }
  }
}
function newStartTime() {
  for (var i = 0; i < startTimeEntry.length; i++) {
    var randomStart = Math.random();
    if (startTimeEntry[i].value !== "") {
      if (randomStart > 0.5) {
        if (startTimeEntry[i].value.charAt(2) !== "3" &&
          startTimeEntry[i].value.charAt(2) !== "1" &&
          startTimeEntry[i].value.charAt(2) !== "4") {
          var randomNum = (Math.random() * 3);
        }
        else if (startTimeEntry[i].value.charAt(2) === "3") {
          randomNum = (Math.random() * 3);
        }
        else if (startTimeEntry[i].value.charAt(2) === "1") {
          randomNum = (Math.random() * 3);
        }
        else if (startTimeEntry[i].value.charAt(2) === "4") {
          randomNum = (Math.random() * 3);
        }
        else randomNum = (Math.random() * 3) - 40;
      }
      else if (randomStart < 0.5) {
        if (startTimeEntry[i].value.charAt(2) !== "3" &&
          startTimeEntry[i].value.charAt(2) !== "1" &&
          startTimeEntry[i].value.charAt(2) !== "4") {
          randomNum = (Math.random() * -3) - 40;
        }
        else if (startTimeEntry[i].value.charAt(2) === "3") {
          randomNum = (Math.random() * -3);
        }
        else if (startTimeEntry[i].value.charAt(2) === "1") {
          randomNum = (Math.random() * -3);
        }
        else if (startTimeEntry[i].value.charAt(2) === "4") {
          randomNum = (Math.random() * -3);
        }
        else randomNum = (Math.random() * -3) - 40;
      }
      var roundNum = Math.floor(randomNum)
      var numberx = parseInt(startTimeEntry[i].value);
      simStart[i].value = (roundNum + numberx);
      if (simStart[i].value < 1000) {
        simStart[i].value = "0" + (roundNum + numberx);
      }
    }
  }
}
//there is something adding 40 to the starttimeentry
//need to fix tha
function newEndTime() {
  for (var i = 0; i < endTimeEntry.length; i++) {
    var randomStart = Math.random();
    if (endTimeEntry[i].value !== "") {
      if (randomStart > 0.5) {
        if (endTimeEntry[i].value.charAt(2) !== "3" &&
          endTimeEntry[i].value.charAt(2) !== "1" &&
          endTimeEntry[i].value.charAt(2) !== "4") {
          var randomNum = (Math.random() * 3);
        }
        else if (endTimeEntry[i].value.charAt(2) === "3") {
          randomNum = (Math.random() * 3);
        }
        else if (endTimeEntry[i].value.charAt(2) === "1") {
          randomNum = (Math.random() * 3);
        }
        else if (endTimeEntry[i].value.charAt(2) === "4") {
          randomNum = (Math.random() * 3);
        }
        else randomNum = (Math.random() * 3) - 40;
      }
      else if (randomStart < 0.5) {
        if (endTimeEntry[i].value.charAt(2) !== "3" &&
          endTimeEntry[i].value.charAt(2) !== "1" &&
          endTimeEntry[i].value.charAt(2) !== "4") {
          randomNum = (Math.random() * -3) - 40;
        }
        else if (endTimeEntry[i].value.charAt(2) === "3") {
          randomNum = (Math.random() * -3);
        }
        else if (endTimeEntry[i].value.charAt(2) === "1") {
          randomNum = (Math.random() * -3);
        }
        else if (endTimeEntry[i].value.charAt(2) === "4") {
          randomNum = (Math.random() * -3);
        }
        else randomNum = (Math.random() * -3) - 40;
      }
      var roundNum = Math.floor(randomNum)
      var numberx = parseInt(endTimeEntry[i].value);
      simEnd[i].value = (roundNum + numberx);
      if (simEnd[i].value < 1000) {
        simEnd[i].value = "0" + (roundNum + numberx);
      }
    }
  }
}
function totalHoursF() {
  for (var i = 0; i < hoursTotal.length; i++) {
    if (startTimeEntry[i].value !== "") {
      if (startTimeEntry[i].value.charAt(3) == "5" || startTimeEntry[i].value.charAt(2) == "3") {
        var numberx = parseInt(startTimeEntry[i].value);
        var wig = numberx + 40;
        if (startTimeEntry[i].value < 1000) {
          startTimeEntry[i].value = "0" + wig;
        }
        else startTimeEntry[i].value = wig;
      }
      var startingMinutes = (endTimeEntry[i].value - startTimeEntry[i].value);
      var hundreds = startingMinutes / 100;
      var noRemainder = Math.floor(hundreds);
      var sixties = noRemainder * 60;
      var remainingMinutes = startingMinutes % 100;
      var totalMinutes = sixties + remainingMinutes;
      hoursTotal[i].value = totalMinutes / 60;
    }
  }
}
function cleanUpStartEntry() {
  for (var i = 0; i < hoursTotal.length; i++) {
    if (startTimeEntry[i].value.charAt(2) == "5" || startTimeEntry[i].value.charAt(2) == "7" || startTimeEntry[i].value.charAt(2) == "8") {
      var numberY = startTimeEntry[i].value - 40;
      startTimeEntry[i].value = numberY;
      if (startTimeEntry[i].value < 1000) {
        startTimeEntry[i].value = "0" + numberY;
      }
    }
  }
}
function cleanUpEndEntry() {
  for (var i = 0; i < hoursTotal.length; i++) {
    if (startTimeEntry[i].value.charAt(2) == "5" || endTimeEntry[i].value.charAt(2) == "7") {
      var numberY = endTimeEntry[i].value - 40;
      endTimeEntry[i].value = numberY;
      if (endTimeEntry[i].value < 1000) {
        endTimeEntry[i].value = "0" + numberY;
      }
    }
  }
}
function cleanUpSimStart() {
  for (var i = 0; i < simActual.length; i++) {
    if (simStart[i].value.charAt(2) == "8" || simStart[i].value.charAt(2) == "7" || simStart[i].value.charAt(2) == "9" || simStart[i].value.charAt(2) == "6") {
      var numberY = simStart[i].value - 40;
      simStart[i].value = numberY;
      if (simStart[i].value < 1000) {
        simStart[i].value = "0" + numberY;
      }
      //remember need to add startTimeEntry into this too
    }
  }
}
function cleanUpSimEnd() {
  for (var i = 0; i < simActual.length; i++) {
    if (simEnd[i].value.charAt(2) == "8" || simEnd[i].value.charAt(2) == "7" || simEnd[i].value.charAt(2) == "9" || simEnd[i].value.charAt(2) == "6") {
      var numberY = simEnd[i].value - 40;
      simEnd[i].value = numberY;
      if (simEnd[i].value < 1000) {
        simEnd[i].value = "0" + numberY;
      }
    }
  }
}
function actualHoursF() {
  for (var i = 0; i < simActual.length; i++) {
    if (startTimeEntry[i].value !== "") {
      var startingMinutes = (simEnd[i].value - simStart[i].value);
      if (startingMinutes < 60) {
        var hundreds1 = startingMinutes / 60;
        simActual[i].value = (hundreds1).toFixed(2);
      }
      else if (startingMinutes > 100 && startingMinutes < 130) {
        var hundreds2 = startingMinutes / 100;
        var noRemainder = Math.floor(hundreds2);
        var sixties = noRemainder * 60;
        var remainingMinutes = startingMinutes % 100;
        var secondHalf = (remainingMinutes / 100) * 60;
        var superMinutes = remainingMinutes / 60;
        var percentage = remainingMinutes / 100;
        var extraMinutes = percentage * 60;
        var totalMinutes = sixties + extraMinutes;
        var whatEvs = secondHalf + sixties;
        simActual[i].value = (superMinutes + noRemainder).toFixed(2);
      }
      else if (startingMinutes > 130) {
        var hundreds3 = startingMinutes / 100;
        var noRemainder = Math.floor(hundreds3);
        var bigNoRemainder = noRemainder * 60;
        var wooHoo = remainingMinutes + bigNoRemainder;
        var remainingMinutes = startingMinutes % 100;
        var secondHalf = (remainingMinutes / 100) * 60;
        var eleFun = secondHalf + bigNoRemainder
        var superMinutes = remainingMinutes / 60;
        var whatEvs = secondHalf + sixties;
        simActual[i].value = (wooHoo / 60).toFixed(2);
      }
      else {
        var hundreds4 = startingMinutes / 100;
        var noRemainder = Math.floor(hundreds4);
        var sixties = noRemainder * 60;
        var remainingMinutes = startingMinutes % 100;
        var totalMinutes = sixties + remainingMinutes;
        var percentage = totalMinutes / 100;
        simActual[i].value = (percentage).toFixed(2);
      }
    }
  }
}
function newSimStart() {
  for (var i = 1; i < simEnd.length; i++) {
    if (startTimeEntry[i].value !== "") {
      simStart[i].value = simEnd[i - 1].value;
    }
  }
}
calc.addEventListener("click", function () {
  totalCalc();
  actualCalc();
  newStartTime();
  newEndTime();
  totalHoursF();
  cleanUpStartEntry();
  cleanUpEndEntry();
  cleanUpSimStart();
  cleanUpSimEnd();
  actualHoursF();
  newSimStart();
});
setTimeout(cleanUpStartEntry, 5000);
setTimeout(cleanUpEndEntry, 5000);
setTimeout(cleanUpSimStart, 5000);
setTimeout(cleanUpSimEnd, 5000);

最新更新