首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在烧瓶/jinja2 2循环中重用JavaScript?

问如何在烧瓶/jinja2 2循环中重用JavaScript?
EN

Stack Overflow用户
提问于 2022-07-14 23:54:50
回答 1查看 32关注 0票数 1

我有一个网页,它将待办事项列表显示为独立的div/区段。每个待办事项上都有一个由JavaScript控制的倒计时时钟。我可以在我的待办事项列表中有多个项目,并希望多个倒计时时钟(每个项目一个)。

JS对列表中的第一项正确运行,但不对多项运行。如果我删除第一个项目的倒计时时钟,那么第二个项目的时钟显示并开始计数。

如何对待办事项列表中的每个项目使用相同的脚本?

我能否将它转换为循环中调用的函数,传递ID?我试过了,但没能成功。

下面是我最好的例子。

代码语言:javascript
复制
{% for todo in todo_list}

// div sections (each section should have its own independent countdown timer)

<div id="segment/{{todo.id}}">
<div id="diff-{{todo.id}}">

// JavaScript inside for loop
// Script to run for each item in todo list and update the div with time/expired based on the todo.id

<script>
var diff = document.getElementById('diff-{{todo.id}}');
var now = moment.utc().format("YYYY-MM-DD HH:mm:ss");
var input_time = '{{todo.created_on}}';
var exam_end_time ='{{todo.eta}}'
var mins = moment.utc(moment(exam_end_time, "HH:mm"),diff(moment(now, "HH:mm"))).format("mm")
var frequency = mins*60
var refreshIntervalId = setInterval(() => {
   const formatted = moment.utc(frequency--*1000.format("mm:ss");
      diff.innerHTML = formatted;
}, 1000;

setTimeout(() => {
   if(mins === ) {
      diff.innerHTML = "Expired";
      clearInterval(refreshIntervalId);
}},frequency*1000;
</script>
</div>
</div>

{% endfor %}
EN

回答 1

Stack Overflow用户

发布于 2022-07-15 03:40:15

在董事会的帮助下找到了解决方案。生命中的包装脚本如下所示。

代码语言:javascript
复制
{% for todo in todo_list}

  // div sections (each section should have its own independent countdown timer)

  <div id="segment/{{todo.id}}">
    <div id="diff-{{todo.id}}">

      // JavaScript inside for loop
      // Script to run for each item in todo list and update the div with time/expired based on the todo.id

      <script>
        (function timer() {
          var diff = document.getElementById('diff-{{todo.id}}');
          var now = moment.utc().format("YYYY-MM-DD HH:mm:ss");
          var input_time = '{{todo.created_on}}';
          var exam_end_time ='{{todo.eta}}'
          var mins = moment.utc(moment(exam_end_time, "HH:mm"),diff(moment(now, "HH:mm"))).format("mm")
          var frequency = mins*60
          var refreshIntervalId = setInterval(() => {
            const formatted = moment.utc(frequency--*1000.format("mm:ss");
            diff.innerHTML = formatted;
          }, 1000;

          setTimeout(() => {
            if (mins === ) {
              diff.innerHTML = "Expired";
              clearInterval(refreshIntervalId);
            }
          },frequency*1000;
        })()
      </script>

    </div>
  </div>
{% endfor %}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72987758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档