JavaScript不能在一个循环中有多个setTimeout函数
JavaScript can't have multiple setTimeout functions in a loop
我有这段代码,它允许您在定时延迟上设置CSS更改。它工作完美,除了它只允许你有一个实例,而我需要它允许许多。它目前只从循环中获取最后一个元素,并保留timeout函数。是否有一种方法,让所有的超时函数从这个循环保存和运行?我认为这只是setTimeout函数每次被覆盖,而不是一个唯一的函数。
注意:我没有得到控制台错误
Javascript(在onload函数中)
elems = _('[data-timecss]'); //function to return elems via querySelectorAll()
for (var i=0; i<elems.length; i++) {
var tempelem = elems[i];
var c_info = elems[i].dataset.timecss.split(","); //split to get time
setTimeout(function() {
var css_e = c_info[1].split(";"); //split to get css properties
for (var c=0; c<css_e.length; c++) {
var css_elem = css_e[c].split(":"); //split property and value
tempelem.style.setProperty(css_elem[0], css_elem[1]); //set value
}
}, c_info[0]); //set time
}
HTML <div class="block">
<p data-timecss="2000,color:green;font-weight:bold;">Change to green after 2000ms</p>
<p data-timecss="5000,display:none;">Hide this block after 5000ms</p>
</div>
最后一个data- timess将正确运行。所以我知道timeout函数每次都被重写。谁有什么想法,如何使这些独特,但也保持它的动态,因为我有吗?
你需要闭包- JavaScript闭包是如何工作的?
elems = _('[data-timecss]'); //function to return elems via querySelectorAll()
for (var i=0; i<elems.length; i++) {
(function(i) { // added this
var tempelem = elems[i];
var c_info = elems[i].dataset.timecss.split(","); //split to get time
setTimeout(function() {
var css_e = c_info[1].split(";"); //split to get css properties
for (var c=0; c<css_e.length; c++) {
var css_elem = css_e[c].split(":"); //split property and value
tempelem.style.setProperty(css_elem[0], css_elem[1]); //set value
}
}, c_info[0]); //set time
}(i)); // added this
}
相关文章:
- setTimeout可以与闭包内的函数一起使用吗
- setTimeout函数能否在其前面的代码执行之前激发
- 在setTimeout中调用相同的函数
- 将jQuery对象传递到setTimeout递归函数中
- 添加一个setTimeout方法会使jQuery悬停方法忽略setTimeout方法中的函数
- JS:setTimeout函数的UI计数
- settimeout调用的函数未结束
- 调用setTimeout内部的函数时发生引用错误
- Jasmine:测试setTimeout函数会抛出一个错误
- setTimeout()在忽略间隔的情况下重复调用函数
- 为什么我需要在setTimeout中有匿名函数才能使此代码工作
- 重复调用的同一函数会重置setTimeout内部函数
- 如何在 javascript 中测试 setTimeout 内部的函数
- setTimeout是否创建函数实例
- 通过fn.apply或fn.bind将函数传递给setTimeout
- setTimeout() 函数在超时持续时间之前调用
- Javascript/Jquery setTimeout 函数不适用于长 html
- 如何让 setTimeout 函数运行,然后停止使用循环
- 嵌套回调函数setTimeout();
- Javascript函数setTimeout和setIntervall不起作用