无法访问时间表的输入

can't acces inputs of a schedule

我正在做一个时间表,它会给出我过去两周在 js 中工作的总小时数,但问题是它不会访问其余的输入,我就是不访问知道为什么了。

我的html

<!DOCTYPE html>
<html lang="fr-CA">
<head>
    <title>hours</title>
    <meta charset="utf-8">
    <script src="js/fonctions.js"></script>
</head>
    <form onsubmit="calculHoraire(event)">
        <h2>1er horaire</h2>
        <table class="horaire">
            <tr>
                <th>Journée</th>
                <th>Dimanche</th>
                <th>Lundi</th>
                <th>Mardi</th>
                <th>Mercredi</th>
                <th>Jeudi</th>
                <th>Vendredi</th>
                <th>Samedi</th>
            </tr>
            <tr>
                <td>De</td>
                <td><input type="time"></td>
                <td><input type="time"></td>
                <td><input type="time"></td>
                <td><input type="time"></td>
                <td><input type="time"></td>
                <td><input type="time"></td>
                <td><input type="time"></td>
            </tr>
            <tr>
                <td>À</td>
                <td><input type="time"></td>
                <td><input type="time"></td>
                <td><input type="time"></td>
                <td><input type="time"></td>
                <td><input type="time"></td>
                <td><input type="time"></td>
                <td><input type="time"></td>
            </tr>
        </table>
        <h2>2ième horaire</h2>
        <table class="horaire">
            <tr>
                <th>Journée</th>
                <th>Dimanche</th>
                <th>Lundi</th>
                <th>Mardi</th>
                <th>Mercredi</th>
                <th>Jeudi</th>
                <th>Vendredi</th>
                <th>Samedi</th>
            </tr>
            <tr>
                <td>De</td>
                <td><input type="time"></td>
                <td><input type="time"></td>
                <td><input type="time"></td>
                <td><input type="time"></td>
                <td><input type="time"></td>
                <td><input type="time"></td>
                <td><input type="time"></td>
            </tr>
            <tr>
                <td>À</td>
                <td><input type="time"></td>
                <td><input type="time"></td>
                <td><input type="time"></td>
                <td><input type="time"></td>
                <td><input type="time"></td>
                <td><input type="time"></td>
                <td><input type="time"></td>
            </tr>
        </table>
        <button type="submit" tabindex="-1" style="float:right;margin-top:20px;margin-right:20px">Voir estimations</button>
        <button type="reset"  tabindex="-1" style="float:right;margin-top:20px;margin-right:20px">Clear</button>
    </form>
        <button type="button" tabindex="-1" onclick="sauvegarde()">Sauvegarder cette page</button>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment-with-locales.min.js"></script>
</body>
</html>

我确实在某些时候遇到了这个错误,但由于这是我第一次使用 moment.js 我完全不知道如何处理它...

TypeError: H(...) is null

它指向我函数中的这一行

var start = moment.utc(startTime, "HH:mm");

代码如下

var hours = [];
function calculHoraire(event){
        event.preventDefault();
        for (var i = 0; i < 28; i++) {
            if(document.getElementsByTagName('input')[i].value == ""){
                document.getElementsByTagName('input')[i].value = "00:00";
                document.getElementsByTagName('input')[(i+7)].value = "00:00";
            }
            if(i == 6){
                i=14;
            }
            // parse time using 24-hour clock and use UTC to prevent DST issues
            var startTime = document.getElementsByTagName('input')[i].value;
            var endTime = document.getElementsByTagName('input')[(i+7)].value;

            var start = moment.utc(startTime, "HH:mm");
            var end = moment.utc(endTime, "HH:mm");

            // account for crossing over to midnight the next day
            if (end.isBefore(start)){
                end.add(1, 'day');
            }

            // calculate the duration
            var d = moment.duration(end.diff(start));

            // subtract the lunch break if it's 5 hour or more...
            if(parseInt((String(d)).charAt(0)) >= 5){
                d.subtract(30, 'minutes');
            }

            hours[i] = moment.utc(+d).format('H:mm');
        }
    }

问题是 你没有传递正确的时间startTimeendTimemoment.utc() 函数,因此你得到了错误。问题出在下面几行以获得正确的值。

  var startTime = document.getElementsByTagName('input')[i].value;
  var endTime = document.getElementsByTagName('input')[(i+7)].value;

备选方案:

您应该通过 id 名称获取值,而不是上述从 input 获取值的方法,以确保您获得正确的值。您可以执行以下操作:

  var startTime = document.getElementById('#startTime').value;
  var endTime = document.getElementsByTagName('#endTime').value;

如果您将正确的时间传递给 moment.utc(),它将起作用。以下是工作示例:

var startTime = "23:00";
var start = moment.utc(startTime, "HH:mm");
console.log(start)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment-with-locales.min.js"></script>