【问题标题】:Multiple javascript counters on the same page同一页面上的多个 javascript 计数器
【发布时间】:2021-09-17 03:59:40
【问题描述】:

我全年都在举办锦标赛,而且价格每天都在上涨。代码有效,但我不确定要调整哪些元素才能同时显示多个价格调整。我尝试将“rate”更改为“rate1”等,但这还不够……所以我猜测内部的变量也应该调整。任何帮助表示赞赏。我正在处理的页面在这里:http://limitlesshoops.com/jamball.html -- 下面的 sn-p 是我目前关注的内容。谢谢。

    <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>

【问题讨论】:

  • 您需要为每个变量使用不同的变量名。或者使用 IIFE 将每个变量放在不同的范围内。

标签: javascript counter


【解决方案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>

【讨论】:

  • 那是不真实的。它有效,但我需要仔细研究它才能真正从中学习。但现在,对我来说,这很神奇......所以谢谢你的魔法:-)
  • 我已成功添加您创建的循环,但我无法让它在同一页面上工作两次。我希望 3v3 专栏具有相同的功能:limitlesshoops.com/jamball.html --- 感谢您提供的任何帮助。
  • 3v3列数据一样吗?
  • 相同的数据,除了用于制表当前和未来价格的不同公式。当我使用相同的容器类名称添加它时,它会将信息放在下面。当我更改该名称时,它只是空白。我用铬检查了它,但没有给出任何线索。太奇怪了,你是如何让它像这样跟踪 HTML 数据的
  • 知道了!不敢相信我花了这么多时间才弄清楚。 Javascript ID、类和变量不能以数字开头。它们应以字母或下划线 (_) 开头。将您的 3v3container 更改为 container3v3,它应该一切都好。
猜你喜欢
  • 2020-05-09
  • 2023-03-18
  • 1970-01-01
  • 2012-03-19
  • 2021-09-02
  • 1970-01-01
  • 1970-01-01
  • 2012-04-17
  • 1970-01-01
相关资源
最近更新 更多