Javascript Проблема querySelector внутри цикла While - PullRequest
1 голос
/ 29 мая 2020

Я пытаюсь прикрепить сценарий обратного отсчета к зацикленным динамическим c div. Обратный отсчет отображается за пределами l oop без проблем, но журнал консоли показывает, что queryselector имеет значение null внутри l oop. Если кто-то может помочь, он будет признателен

var expiration = data[i]['expiration'];

function getTimeRemaining(expiration) {
  var t = Date.parse(expiration) - Date.parse(new Date());
  var seconds = Math.floor((t / 1000) % 60);
  var minutes = Math.floor((t / 1000 / 60) % 60);
  var hours = Math.floor((t / (1000 * 60 * 60)) % 24);
  var days = Math.floor(t / (1000 * 60 * 60 * 24));
  return {
    'total': t,
    'days': days,
    'hours': hours,
    'minutes': minutes,
    'seconds': seconds
  };
}

function initializeClock(id, expiration) {
  var clock = document.getElementById(id);
  var daysSpan = clock.querySelectorAll('.days');
  var hoursSpan = clock.querySelectorAll('.hours');
  var minutesSpan = clock.querySelectorAll('.minutes');
  var secondsSpan = clock.querySelectorAll('.seconds');

  function updateClock() {
    var t = getTimeRemaining(expiration);

    daysSpan.innerHTML = t.days;
    hoursSpan.innerHTML = t.hours;
    secondsSpan.innerHTML = ('0' + t.minutes).slice(-2);
    secondsSpan.innerHTML = ('0' + t.seconds).slice(-2);

    if (t.total <= 0) {
      clearInterval(timeinterval);
    }
  }

  updateClock();
  var timeinterval = setInterval(updateClock, 1000);
}

initializeClock('clockdiv', expiration);


if (email == "") {

  if (promoType == "Banner") {
    $('#load-container-expiring').append('<div class="row-center-center padding-top-5 padding-bottom-2"><div>' + promoNameExpiringButton + '</div></div>');
    $('#load-container-expiring').append('<div><div class="wrap-content"><img class="mobile-banner-scale" id="visitor-banner-click" src=' + theBanner + '></div></div>');
    -- >>> Issue Here-- - > $('#load-container-expiring').append('<div id="clockdiv"><span class="days"></span> Days <span class="hours"></span> Hours <span class="minutes"></span> Minutes <span class="seconds"></span> Seconds</div>');
  }

1 Ответ

0 голосов
/ 29 мая 2020

В тот момент, когда вы звоните initializeClock('clockdiv', expiration), div с идентификатором "clockdiv" еще не существует. Таким образом, clock будет неопределенным, а clock.querySelectorAll(...) вызовет исключение.

Переместите этот initializeClock('clockdiv', expiration) под кодом, который добавляет этот элемент «clockdiv» в DOM.

Также исправьте первый secondsSpan.innerHTML = как minutesSpan.innerHTML =

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...