JS обратный отсчет до заказа до 5 вечера, проблема с другими продуктами 3 вечера - PullRequest
0 голосов
/ 17 июня 2019

Привет, я создаю сайт с обратным отсчетом времени доставки в JS (заказ в ближайшие 5 часов 58 минут для доставки к среде).По умолчанию используется 17:00, но некоторые товарные ряды должны быть заказаны в 15:00. Div, который содержит эти продукты, это "supplier_1010".

часть с этим кодом, похоже, не находит div с классом supplier_1010 и не изменяет таймер.

https://jsfiddle.net/iangerdes/eqc6jsho/127/ имеет пример этого.

html

<div class="product">
<div class="timer"></div>  
</div>
<div class="product">
<div class="timer"></div>  
</div>
<div class="product">
<div class="timer"></div>  
</div>
<div class="product supplier_1010">
<div class="timer "></div>  
</div>
<div class="product supplier_1010">
<div class="timer"></div>  
</div>
<div class="product">
<div class="timer"></div>  
</div>

JS

Этот бит не работает.

if ($this.find('.supplier_1010').length > 0) {

      start.setHours(14, 45, 0); // 14.45
  }

JS

$('.product').each(function() { 
  var $this = $(this);
  var countdown = setInterval(function() { 


     var start = new Date();
     var now = new Date();
     var weekday = now.getDay();

   var days = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
  var deliverydate = days[start.getDay() +1 ];

 if ($this.find('.supplier_1010').length > 0) {

      start.setHours(14, 45, 0); // 14.45
  }

  else { 
  start.setHours(17, 0, 0); // 5.00
  }





  if (now > start) { // too late, go to tomorrow
        start.setDate(start.getDate() + 1);
       deliverydate = days[now.getDay() +2 ];
      } 



    var Today = start.getDate();
    var Month = start.getMonth();


    var remain = ((start - now) / 1000);  
    var hh = Math.floor((remain / 60 / 60) % 60); 
    var mm = Math.floor((remain / 60) % 60);
    var ss = Math.floor(remain % 60);


  var timertext ='<i class="fa fa-truck"></i>' + 'Order in the next ' + '<strong>' + hh + ' hrs ' + mm + ' mins ' + ss + '</strong>'+ ' for delivery  by '+ deliverydate + '<a href="#" class="small" data-toggle="modal" data-target="#myDelivery">' + ' * See Exceptions'+ '</a>';



   jQuery(".timer").html(''+ timertext +'');



  }, 1000); 


  });

любая помощь будет отличной.это, вероятно, действительно просто, но не могу понять это !!

ура Иан

1 Ответ

0 голосов
/ 17 июня 2019

.find(selector) будет «Получать потомков каждого элемента в текущем наборе соответствующих элементов, отфильтрованных селектором, объектом jQuery или элементом»..find документы .

Ваш цикл .each проходит через каждый .product дел.Для каждого div он ищет потомка с классом supplier_1010, но ни в коем случае в вашем HTML не может быть .supplier_1010 потомок .product.

Вместо

  • if ($this.find('.supplier_1010').length > 0) {

вы можете попробовать

  • $this.hasClass('supplier_1010')

Вы действительно хотите найти случай, когда div, который вы зацикливаете на , сам имеет класс supplier_1010 (см. .hasClass docs ).

EDIT ---

Кроме того,

  • jQuery(".timer").html(''+ timertext +'');

в конце должно быть обновлено до:

  • jQuery($this).find(".timer").html(''+ timertext +''); => таким образом он обновляет каждый отдельный таймер с timertext, а не со всеми таймерами.

См. Рабочую скрипку: https://jsfiddle.net/h9zpw43v/1/

...