'jQuery each loop executes function only for the last element
I'm making a countdown and using a flip-clock. Here is the markup
<div class="timer-special-offer"
data-year="@Model.SpecialOfferModel.DateStart.Value.Year"
data-month="@Model.SpecialOfferModel.DateStart.Value.Month"
data-day="@Model.SpecialOfferModel.DateStart.Value.Day"
data-hour="@Model.SpecialOfferModel.DateStart.Value.Hour"
data-minute="@Model.SpecialOfferModel.DateStart.Value.Minute"
data-second="@Model.SpecialOfferModel.DateStart.Value.Second"
data-year-now="@DateTime.Now.Year"
data-month-now="@DateTime.Now.Month"
data-day-now="@DateTime.Now.Day"
data-hour-now="@DateTime.Now.Hour"
data-minute-now="@DateTime.Now.Minute"
data-second-now="@DateTime.Now.Second">
<div class="timer-counter">
<div class="counter-inner"></div>
</div>
</div>
Js code is something like this:
$(document).ready(function () {
$('.timer-special-offer').each(function () {
var timer = $('.timer-special-offer');
if (timer.length) {
const clock = $('.counter-inner').FlipClock({
clockFace: 'DailyCounter',
countdown: true,
language: 'ru-ru'
});
const targetDate = new Date(
parseInt(timer.data('year')),
parseInt(timer.data('month')) - 1,
parseInt(timer.data('day')),
parseInt(timer.data('hour')),
parseInt(timer.data('minute')),
parseInt(timer.data('second')));
const nowDate = new Date(
parseInt(timer.data('yearNow')),
parseInt(timer.data('monthNow')) - 1,
parseInt(timer.data('dayNow')),
parseInt(timer.data('hourNow')),
parseInt(timer.data('minuteNow')),
parseInt(timer.data('secondNow')));
const time = (targetDate - nowDate) / 1000;
clock.setTime(time);
clock.start();
}
});
});
There are multiple objects with timer on them but the timer is working on the last object on the page like I never iterated through the timer-special-offer. Can't figure out why.
Solution 1:[1]
you are not looping on each element, your code is executing one specified code for 2..3.... times. you have to change :
$('.timer-special-offer').each(function (index,element) {
var timer = $(element);
if (timer.length) {
const clock = timer .find('.counter-inner').FlipClock({
clockFace: 'DailyCounter',
countdown: true,
language: 'ru-ru'
});
const targetDate = new Date(
parseInt(timer.data('year')),
parseInt(timer.data('month')) - 1,
parseInt(timer.data('day')),
parseInt(timer.data('hour')),
parseInt(timer.data('minute')),
parseInt(timer.data('second')));
const nowDate = new Date(
parseInt(timer.data('yearNow')),
parseInt(timer.data('monthNow')) - 1,
parseInt(timer.data('dayNow')),
parseInt(timer.data('hourNow')),
parseInt(timer.data('minuteNow')),
parseInt(timer.data('secondNow')));
const time = (targetDate - nowDate) / 1000;
clock.setTime(time);
clock.start();
}
});
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | mostafa khoramnia |
