Javascript 值的自动求和​;/代码循环

Javascript 值的自动求和​;/代码循环,javascript,html,frontend,Javascript,Html,Frontend,情况描述: 我有class=“start”中描述的时间输入和class=“end”中描述的时间输入。根据公式“end start=actual”计算差异。“actual”是时间输入。实际输入应加起来,并用id=“sum\u Actual”(type=text)写入输入 问题: 在这个问题上,我有两个问题: a) 我不知道如何循环对单个输入进行汇总的代码class=actual,最终有30多个 b) 代码的编写方式是,我必须在input class=actual中手动输入时间,以便更新为整个总和,

情况描述:

我有class=“start”中描述的时间输入和class=“end”中描述的时间输入。根据公式“end start=actual”计算差异。“actual”是时间输入。实际输入应加起来,并用id=“sum\u Actual”(type=text)写入输入

问题:

  • 在这个问题上,我有两个问题:

    a) 我不知道如何循环对单个输入进行汇总的代码class=actual,最终有30多个

    b) 代码的编写方式是,我必须在input class=actual中手动输入时间,以便更新为整个总和,当结果自动计算时,它不会累加

  • 注意事项:

  • 最终,class=实际输入将是只读的

  • 最终还有其他几个列包含输入(不重要) )在开始和结束以及实际输入之间(化妆品,我注意编写代码的方式)

  • 我的代码/I尝试过上述javascript代码有待改进

    
    //求和值的代码​​从实际类/应该循环它
    函数msToTime(持续时间){
    var分钟=数学楼层((持续时间/(1000*60))%60),
    小时=数学楼层(持续时间/(1000*60*60));
    小时=小时<10?“0”+小时:小时;
    分钟=分钟<10?“0”+分钟:分钟;
    返回时间+“:”+分钟;
    }
    控制台日志(msToTime(300000));
    函数sum_diff(){
    zxc=document.getElementById(“实际值1”).value;
    xcz=document.getElementById(“实际_2”).值;
    czx=document.getElementById(“实际_3”).值;
    zxc=zxc.拆分(“:”);
    xcz=xcz.split(“:”);
    czx=czx.拆分(“:”);
    var zxcDate=新日期(0,0,0,zxc[0],zxc[1],0);
    var xczDate=新日期(0,0,0,xcz[0],xcz[1],0);
    var czxDate=新日期(0,0,0,czx[0],czx[1],0);
    var zxcMs=
    zxcDate.getHours()*60*60*1000+
    zxcDate.getMinutes()*60*1000;
    var-xczMs=
    xczDate.getHours()*60*60*1000+
    xczDate.getMinutes()*60*1000;
    var-czxMs=
    czxDate.getHours()*60*60*1000+
    getMinutes()*60*1000;
    var ms=zxcMs+xczMs+czxMs;
    返回msToTime(毫秒);
    }
    var elements=document.getElementsByClassName(“实际”);
    对于(var i=0;i

    获取数组中的所有
    实际值,然后使用矩计算总持续时间

    //const durations=document.getElementsByClassName('actual').map(输入=>input.value);
    //比如说,我们得到了以下持续时间
    施工持续时间=['01:30','05:00','10:20'];
    const totalDuration=持续时间。切片(1)
    .减少((上一个,当前)=>瞬间持续时间(当前)。增加(上一个),
    持续时间(持续时间[0]);
    const requiredOutput=`${totalDuration.asHours().toFixed(0)}:${totalDuration.minutes().toString().padStart(2,'0')}`;
    console.log(requiredOutput)

    当遇到这种情况时,我喜欢将我的大问题分解成非常小的问题,并制作非常小的函数,这些函数只做一件事,但要做好:

    const-actuals=[…document.getElementsByClassName(“实际”)];
    document.querySelector('table')。addEventListener('change',函数(e){
    const classList=e.target.classList;
    if(classList.contains('start')| | classList.contains('end')){
    //检索相关的输入
    const tr=e.target.parentNode.parentNode;
    const[start,end,actual]=[…tr.querySelectorAll('.start,.end,.actual');
    const value=diff(start.value,end.value);
    实际值=实际值;
    updateActualSum();
    }
    });
    //加载后更新总持续时间
    updateActualSum();
    函数msToTime(持续时间){
    常数分钟=数学楼层((持续时间/(1000*60))%60),
    小时=数学楼层(持续时间/(1000*60*60));
    返回两个或多个数字(小时)+“:”+两个或多个数字(分钟);
    }
    函数两位或更多位(n){
    返回n<10?'0'+n:n;
    }
    函数timeToMs(时间){
    if(time){//如果未设置该值,则可能为“”
    const[hours,minutes]=time.split(“:”).map(str=>parseInt(str,10));
    返回时间(小时*60+分钟)*60*1000;
    }
    返回0;
    }
    函数sum_diff(){
    const sum=实际减少值((acc,el)=>acc+timeToMs(el.值),0);
    返回msToTime(总和);
    }
    功能差异(开始、结束){
    返回msToTime(timeToMs(end)-timeToMs(start));