javascript #counter
#javascript #счетчик
Вопрос:
Я провожу турниры в течение года, и цена растет с каждым днем. Код работает, но я не уверен, какие элементы нужно настроить, чтобы иметь возможность отображать несколько корректировок цен одновременно. Я попытался изменить «rate» на «rate1» и т.д., но этого было недостаточно… Поэтому я предполагаю, что переменные внутри также должны быть скорректированы. Любая помощь приветствуется. Страница, над которой я работаю, находится здесь: http://limitlesshoops.com/jamball.html — Приведенный ниже фрагмент — это то, на чем я сейчас сосредоточен. Спасибо.
<div class="eventbox mlk activebox"><img src="https://fiftyallstars.com/Images/jammlk.gif" class="holidayback">
<span class="eventlabel tourney">MLK DAY SHOWCASE</span><br><div class="numberfont eventdetails">
January 17-18, 2022<br>
Grades: 1st-8th<br>
Current Price: <div class="rate" style="display: inline; font-weight:bold;"></div>
<script type="text/javascript">
const days = (date) => Math.ceil(date.getTime() / (24 * 60 * 60 * 1000));
const DEADLINE = days(new Date("2022-01-10"));
const START = days(new Date("2021-10-01"));
const TODAY = days(new Date());
const res = Math.round(400 - 300 * ((DEADLINE - TODAY) / (DEADLINE - START)));
console.log(res);
document.querySelector('.rate').append(`${res}`)
</script>
<br>
</div>
<table class="buttontable"><tr><td><a href="javascript:void(0);" class="eventlink"><div class="eventbutton">Brackets</div></a></td><td><a href="javascript:void(0);" class="eventlink"><div class="eventbutton">Register</div></a></td></tr></table>
</div>
<div class="eventbox "><img src="https://fiftyallstars.com/Images/jamabe.png" class="holidayback">
<span class="eventlabel">PREZ DAY CHALLENGE</span><br><div class="numberfont eventdetails">
February 17-18, 2022<br>
Grades: 1st-8th<br>
Current Price: <div class="rate" style="display: inline; font-weight:bold;"></div>
<script type="text/javascript">
const days = (date) => Math.ceil(date.getTime() / (24 * 60 * 60 * 1000));
const DEADLINE = days(new Date("2022-02-10"));
const START = days(new Date("2021-10-01"));
const TODAY = days(new Date());
const res = Math.round(400 - 300 * ((DEADLINE - TODAY) / (DEADLINE - START)));
console.log(res);
document.querySelector('.rate').append(`${res}`)
</script>
<br>
</div>
<table class="buttontable"><tr><td><a href="javascript:void(0);" class="eventlink"><div class="eventbutton">Brackets</div></a></td><td><a href="javascript:void(0);" class="eventlink"><div class="eventbutton">Register</div></a></td></tr></table>
</div>
Комментарии:
1. Вам нужно использовать разные имена переменных для каждого из них. Или используйте IIFEs, чтобы поместить каждую переменную в другую область видимости.
Ответ №1:
Я думаю, вам следует использовать цикл для генерации этих HTML-элементов, поскольку они имеют одинаковую структуру. Это проще в обслуживании и намного меньше кода.
Ниже приведено мое решение:
<div id="eventboxcontainer"></div>
<script type="text/javascript">
var data = [
{
"title" : "MLK DAY SHOWCASE",
"img" : "https://fiftyallstars.com/Images/jammlk.gif",
"dateRange" : "January 17-18, 2022",
"grades" : "1st-8th",
"deadline" : "2022-01-10",
"start" : "2021-10-01"
},
{
"title" : "PREZ DAY CHALLENGE",
"img" : "https://fiftyallstars.com/Images/jamabe.png",
"dateRange" : "February 17-18, 2022",
"grades" : "1st-8th",
"deadline" : "2022-02-10",
"start" : "2021-10-01"
}
];
var days = (date) => Math.ceil(date.getTime() / (24 * 60 * 60 * 1000));
var TODAY = days(new Date());
for (var i = 0; i < data.length; i ) {
var html = "";
var DEADLINE = days(new Date(data[i].deadline));
var START = days(new Date(data[i].start));
var rate = Math.round(400 - 300 * ((DEADLINE - TODAY) / (DEADLINE - START)));
html = '<div class="eventbox mlk activebox"><img src="' data[i].img '" class="holidayback">'
'<span class="eventlabel tourney">' data[i].title '</span><br><div class="numberfont eventdetails">'
data[i].dateRange '<br>'
data[i].grades '<br>'
'Current Price: <div class="rate" style="display: inline; font-weight:bold;">' rate '</div>'
'<br>'
'</div>'
'<table class="buttontable"><tr><td><a href="javascript:void(0);" class="eventlink">'
'<div class="eventbutton">Brackets</div></a></td><td><a href="javascript:void(0);" class="eventlink">'
'<div class="eventbutton">Register</div></a></td></tr></table> </div>';
// you need jQuery for this
//$("#eventboxcontainer").append(html);
// pure Javascript
var element = document.querySelector("#eventboxcontainer");
element.insertAdjacentHTML('beforeend', html);
}
</script>
Комментарии:
1. Это нереально. Это работает, но мне нужно просмотреть тонну, чтобы действительно извлечь из нее уроки. Но прямо сейчас для меня это волшебство… Так что спасибо вам за ваше волшебство 🙂
2. Я успешно добавил созданный вами цикл, но я не могу заставить его работать дважды на одной странице. Я бы хотел, чтобы столбец 3v3 имел ту же функциональность: limitlesshoops.com/jamball.html — Спасибо за любую помощь, которую вы можете оказать.
3. имеет ли столбец 3v3 одинаковые данные?
4. Те же данные, за исключением другой формулы для табулирования текущих и будущих цен. Когда я добавил его с тем же именем класса контейнера, он поместил информацию ниже. Когда я изменил это имя, оно просто появилось как пустое. Я проверил его с помощью chrome, но это не дало никаких подсказок. Так странно, как вы заставили его следовать таким HTML-данным
5. Понял! Не могу поверить, что мне потребовалось так много времени, чтобы понять это. Идентификаторы, классы и переменные Javascript не могут начинаться с числа. Они должны начинаться с буквы или символа подчеркивания (_). измените свой 3v3container на container3v3, и все должно быть хорошо.