我在html中有此代码,可为上下文变量中的每个元素创建一个html代码块。
{% for car, speed in carSpeeds.items %}
<div id="car1">
<div id="carSpeedBar">
<!-- progress bar indicating car speed value goes here -->
</div>
</div>
<p id='result'></p>
<!-- div simply holding the variables for each iteration -->
<div class="container">
<p id='carType'>{{ car }}</p>
<p id='carSpeed'>{{ speed }}</p>
</div>
{% endfor %}
目标:我想为每个创建的栏运行此JS / JQ代码
var bar = $('#carSpeedBar');
var result = $('#carSpeed').text();
var res = document.getElementById('result');
var width = 0;
var id = setInterval(speed, 12);
function speed(){
if (width < result){
width++;
bar.style.width = width + '%';
res.innerHTML = width + '%';
到目前为止,这是我所拥有的并且可以正常工作,但这仅为html代码的第一块创建了条形,而忽略了其他代码块,我不知道为什么。像这样,它为梅赛德斯创建了一个标杆,并且将所有其他值都保留下来,而将其他所有值保留为空白。我的猜测是它拒绝覆盖元素的ID,因为它们可能以某种方式被复制。请告诉我我做错了什么,以及我应该如何实现这一目标。
谢谢。
正如PRMoureu在评论中所说:您确实应该正确设置ID。您可以在模板中使用forloop.counter变量来获取从1开始的当前迭代编号。将变量添加到id之前是这样的:
<div id="carSpeedBar{{forloop.counter}}">
第二件事是泛化您的JavaScript,以便它可以处理多辆汽车。将您的代码段包装到一个以汽车ID为参数的函数中,并根据此参数将您的硬编码ID调整为动态
function animateCarSpeed(var id) {
var bar = $('#carSpeedBar' + id);
//...
}
最后,您将不得不调用新的通用JavaScript函数。根据您包含JavaScript的方式,您将在JavaScript文件中,script
模板循环内的新元素或模板末尾调用函数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句