简体   繁体   English

Javascript 查询选择器问题在 While 循环内

[英]Javascript querySelector Problem Inside While Loop

I am trying to attach a countdown script to looped, dynamic divs.我正在尝试将倒计时脚本附加到循环的动态 div。 The countdown shows outside of the loop without issue, but console log shows queryselector is null inside the loop.倒计时显示在循环外没有问题,但控制台日志显示 queryselector 在循环内是 null。 If anyone can help it would be appreciated如果有人可以提供帮助,将不胜感激

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>');
  }

At the moment you call initializeClock('clockdiv', expiration) , the div with id "clockdiv" does not exist yet.在您调用initializeClock('clockdiv', expiration)的那一刻,id 为 "clockdiv" 的div还不存在。 And so clock will be undefined, and clock.querySelectorAll(...) will generate an exception.因此clock将未定义,并且clock.querySelectorAll(...)将产生异常。

Move that initializeClock('clockdiv', expiration) below the code that adds that "clockdiv" element to the DOM.initializeClock('clockdiv', expiration)移到将“clockdiv”元素添加到 DOM 的代码下方。

Also fix the first secondsSpan.innerHTML = to be minutesSpan.innerHTML =还将第一个secondsSpan.innerHTML =修复为minutesSpan.innerHTML =

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM