javaScript函数滞后了一个周期,并且
我一直在忙于编写代码,但我并没有停止编写程序。它有很多代码,所以我把它做成了一个代码笔。以下是链接: *depen.io/animalZero/pen/jaerjQjavaScript函数滞后了一个周期,并且,javascript,algorithm,time,base-60,Javascript,Algorithm,Time,Base 60,我一直在忙于编写代码,但我并没有停止编写程序。它有很多代码,所以我把它做成了一个代码笔。以下是链接: *depen.io/animalZero/pen/jaerjQ 我知道它说你必须输入代码笔附带的代码(冗余),但是javascript本身就是330个HTML,CSS也有数百行,我需要每行按空格键4次吗?呃,技术细节 到现在为止,我已经从中找出了大部分bug(我可能从8月份开始在JS中编写代码,我在行业中工作)。我最喜欢JS的算法脚本部分,我的程序就是这么做的 这里的问题是actualHours
我知道它说你必须输入代码笔附带的代码(冗余),但是javascript本身就是330个HTML,CSS也有数百行,我需要每行按空格键4次吗?呃,技术细节 到现在为止,我已经从中找出了大部分bug(我可能从8月份开始在JS中编写代码,我在行业中工作)。我最喜欢JS的算法脚本部分,我的程序就是这么做的 这里的问题是actualHoursF()函数应该计算模拟的小时数,并在simActual框中给出一个值。我想我在做傻事。当您单击“计算”按钮时,它会填充模拟总数,但我在该按钮上有多个事件侦听器,actualHoursF()就是其中之一。如果再次单击该按钮,actualHoursF()函数会将sim总计相加,但此时我的其他函数正在向表中注入与actualHours总计不匹配的新数据。它落后一个周期。如果有人能帮我,我会很高兴的 另一个问题是我的sim卡总数有时会出现NaN。我注意到只有当newEndTime()生成一个正整数时才会发生这种情况。newEndTime基本上取endTimeEntry中输入的结束时间,然后随机加上或减去0到3之间的数字,给出一个模拟时间。我还应该提到,newStartTime对startTimeEntry也做了同样的事情。我的“cleanUpXXX”函数是从基数为10的数学转换成基数为60的数学,在某些条件下减去40,在其他条件下不使用它。其中有4个,两个用于手动输入的时间,两个用于模拟的时间。底部还有一个函数叫做“newSimStart”,它从第2行开始,用上一次迭代的结束时间覆盖模拟的开始时间(非常酷,嗯:微微一笑:),这使它更真实。提前感谢各位,我知道它有很多代码,而且写得不是很好。我也有一些愚蠢的变量名,我知道我不应该这么做,但我太懒了。谢谢
PS我可以根据需要提供更多信息。我在免费代码营上发布了这篇文章,但这篇文章被mods掩埋了,因为它连接到了一个两个月前的死文章上,所以我来向你们寻求帮助。说实话,你们的代码有很多问题。大量重复,有些函数什么都不做,变量什么也不去,等等。计算可以压缩成一行,所有的条件都可以压缩,所以它们只改变重要的部分,而不是重复整个大量的代码块。但这不是,所以我会坚持主要的错误 主要问题在于,您正在将多个异步事件侦听器附加到单击处理程序。因为它们是异步的,所以它们可以按自己喜欢的任何顺序运行。因此,某些函数所需的某些内容在执行时不可用。解决这个问题的最简单方法就是创建一个事件处理程序,然后按照您希望的顺序运行函数。实际上,代码应该是更好的结构和分离的,但是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);
}
}
}
}
函数实际值hoursf(){
对于(变量i=0;i100和启动分钟数<130){
simActual[i].值=((剩余分钟/60)+noRemainder).toFixed(2);
}
否则,如果(启动分钟数>130){
simActual[i].value=((remainingMinutes+bigNoRemainder)/60.toFixed(2);
}
否则{
simActual[i]。值=(总分钟数/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);
var workOrderEntry=document.queryselectoral(“.workOrder”);
var starttimementry=document.queryselectoral(“.startTime”);
var endTimeEntry=document.querySelectorAll(“.endTime”);
var hoursTotal=document.querySelectorAll(“.totalHours”);
var simStart=document.queryselectoral(“.simStart”);
var simEnd=document.querySelectorAll(“.simEnd”);
var simActual=document.queryselectoral(“.simActual”);
var calc=document.querySelector(“计算”);
var moreLines=document.querySelector(“moreLines”);
var tableRow=document.querySelector(“.row”);
var bigTotal=document.querySelector(“.bigTotal”);
var bigActual=document.querySelector(“.bigActual”);
/*----------------------------------------------------*/
函数totalCalc(){
var-smallTotal=0;
为了=