Html возвращает нулевое время обратного отсчета

Я пытаюсь создать выскочку таймера из определенного значения

JS-код

            <script type = "text/javascript"> 
            var minutesLabel = document.getElementById("minutes");
            var secondsLabel = document.getElementById("seconds");
            var totalSeconds = 0;
            setInterval(setTime, 1000);
            function setTime() {
                ++totalSeconds;
                secondsLabel.innerHTML = pad(totalSeconds % 60);
                minutesLabel.innerHTML = pad(parseInt(totalSeconds / 60));
            }

            function pad(val) {
                var valString = val + "";
                if (valString.length < 2) {
                    return "0" + valString;
                }
                else {
                    return valString;
                }
            }
        </script>

HTML-код

<asp:Label ID = "minutes" runat = "server" Text = "00"></asp:Label>:<asp:Label ID = "seconds" runat = "server" Text = "00"></asp:Label>

Консоль ошибок и продолжайте печатать каждую 1 секунду

Uncaught TypeError: secondLabel имеет значение null setTime https://localhost:44340/посещаемость:30

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
66
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В скрипте нет ничего плохого, похоже, он по какой-то причине не находит ваши html-элементы. Должно быть что-то еще, потому что следующий скрипт отлично работает в моем браузере как обычный html-файл:

<body>
<asp:Label ID = "minutes" runat = "server" Text = "00"></asp:Label>:<asp:Label ID = "seconds" runat = "server" Text = "00"></asp:Label>
    
    <script type = "text/javascript"> 

            var minutesLabel = document.getElementById("minutes");
            var secondsLabel = document.getElementById("seconds");
            var totalSeconds = 0;

            setInterval(setTime, 1000);
            function setTime() {
        
                ++totalSeconds;
                secondsLabel.innerHTML = pad(totalSeconds % 60);
                minutesLabel.innerHTML = pad(parseInt(totalSeconds / 60));
            }

            function pad(val) {
                var valString = val + "";
                if (valString.length < 2) {
                    return "0" + valString;
                }
                else {
                    return valString;
                }
            }
    </script>
</body>

Может быть, вы могли бы попробовать поменять местами теги с обычными и посмотреть, исчезнет ли проблема (извините, я не знаю ASP и влияет ли это на ваш пример).

Скрипт может немного запаздывать для обновления счетчика, если у него есть какая-то другая работа, поэтому, если вам нужно, чтобы он показывал точные секунды даже по прошествии длительного периода времени, вы можете начать с получения метки времени let startTime = Date.now() в начале скрипта и изменить setInterval обратный вызов для отображения разницы во времени между началом и сейчас. function settime() { let totalSeconds = ( Date.now() - startTime) / 1000; /* rest of the function stays the same */ }

Simas Butavičius 25.12.2020 15:57

о, это мое плохо, потому что я новичок, но JS до меток я делал как у, и это работает еще один вопрос. Могу ли я остановить счет и начать счет в зависимости от состояния кнопки Active или директивы?

Ebram Shehata 25.12.2020 16:01

теперь у меня другая проблема, когда я позволяю ему начать с 18:54, он продолжает добавлять 1 секунду до 59, затем должен добавить 1 минуту до 18, но это не работает для меня, он сохраняет установленное значение 18, затем сбрасывает минуты

Ebram Shehata 25.12.2020 16:16

Вы можете делать в Javascript все, что хотите :) Например, если вы оставляете свой код как есть, вставьте <button id = "btn">Start / Sttop</button> в тело документа. Затем в начале скрипта вы можете добавить let btnEnabled = true; document.querySelector('#btn').onclick = () => btnEnabled = !btnEnabled; И в свою setInterval функцию обратного вызова if (btnEnabled) {++totalSeconds};. Но это не то место, где можно просить людей написать для вас код. Я призываю вас изучить основы Javascript, очень хорошее место для этого здесь developer.mozilla.org/en-US/docs/Web/JavaScript.

Simas Butavičius 25.12.2020 16:22

Что касается сброса счетчика, это может быть связано с факторами, не указанными в вашем посте. У меня скрипт работает нормально, 20 минут и больше.

Simas Butavičius 25.12.2020 16:38

Другие вопросы по теме

Похожие вопросы