显示事件序列的 Javascript
Javascript displaying sequence of events
>我有一个 4x4 网格,我想显示颜色序列,以便一次在单个单元格中显示不同的颜色。
使用循环不起作用:
var table = document.getElementById('myTable');
for(var i=0; i<sequence.length; i=i+3) {
setTimeout(function(){ table.rows[sequence[i]].cells[sequence[i+1]].className = sequence[i+2]; }, timeout);
setTimeout(function(){ table.rows[sequence[i]].cells[sequence[i+1]].className = 'black'; }, timeout+1999);
timeout = timeout+2000;
}
} catch(err) { alert(err); }
}
按顺序使用语句可以:
setTimeout(function(){ table.rows[sequence[0]].cells[sequence[1]].className = 'black'; }, 2999);
setTimeout(function(){ table.rows[sequence[3]].cells[sequence[4]].className = sequence[5]; }, 3000);
setTimeout(function(){ table.rows[sequence[3]].cells[sequence[4]].className = 'black'; }, 4999);
(...
有谁知道为什么循环不起作用?我尝试清除超时,但没有快乐。
这是一个经典的闭包问题:当调用函数时,i具有循环结束的值。
我喜欢使用对象来封装变量并避免这些问题。例如:
var table = document.getElementById('myTable');
function C(i, timeout) {
this.i=i;
this.timeout = timeout;
}
C.prototype.doThing = function() {
setTimeout(function(){ table.rows[sequence[obj.i]].cells[sequence[obj.i+1]].className = sequence[i+2]; }, timeout);
setTimeout(function(){ table.rows[sequence[obj.i]].cells[sequence[obj.i+1]].className = 'black'; }, timeout+1999);
};
for(var i=0; i<sequence.length; i=i+3) {
new C(i, timeout)).doThing();
timeout = timeout+2000;
}
}
像这样使用自调用函数来传递不同的i
值,否则您将传递相同的值:
var table = document.getElementById('myTable');
for(var i=0; i<sequence.length; i=i+3) {
(function(i){
setTimeout(function(){ table.rows[sequence[i]].cells[sequence[i+1]].className = sequence[i+2]; }, timeout);
setTimeout(function(){ table.rows[sequence[i]].cells[sequence[i+1]].className = 'black'; }, timeout+1999);
timeout = timeout+2000;
})(i)
} catch(err) { alert(err); }
相关文章:
- 如何将javascript事件从web浏览器wpf控件发送到wpf的c#代码
- 在同一个javascript事件处理程序中调用不同的函数
- Javascript事件;在新选项卡中打开”;
- 存在每个时间元素的javascript事件
- Javascript事件.锚的目标问题
- 带有参数的Javascript事件处理程序
- 如何从另一个处理程序内部取消JavaScript事件处理程序函数的执行
- firefox中的Javascript事件范围问题
- Firefox中的JavaScript事件参数
- 在动态加载的PHP表单上放置JavaScript事件
- 如何在Javascript事件上从JSNI设置GWTClass字段
- Javascript事件发射器一次处理多个事件
- 在下拉式javascript事件监听器中选择时触发事件
- 在javascript中导入xlsx文件时,如何手动强制javascript事件
- 显示触发的JavaScript事件
- 正在取消IE11中的JavaScript事件
- 页面卸载期间的JavaScript事件循环
- 存在其他参数时访问Javascript事件
- 阻止Javascript事件影响子元素
- 如何在事件处理程序中获取 javascript 事件对象