首页->正文

javascript中setInterval引起的倒计时问题

2011-09-29 -Web开发 标签: javascript

同事编写的倒计时功能,发现firefox和chrome下功能正常,但IE下却是每次减两秒。演示代码如下:
<div id="show"></div>
<script>
var a = 100;
function func_a(){
     a--;
}
function func_b(){
     document.getElementById('show').innerHTML = a;
}
setInterval(func_a, 1000);
setInterval(func_b, 1000);
</script>
在IE下可以看到内容是每次减2。莫非真是每两秒执行一次?通过增加另外一个标记内容,看下func_b是否真是每两秒种执行一次:
<div id="show"></div>
<div id="show2"></div>
<script>
var a = 100;
function func_a(){
     a--;
}
function func_b(){
     document.getElementById('show').innerHTML = a;
     //增加当前的时间,检测是否真是每秒执行
     var NowTime = new Date();
     document.getElementById('show2').innerHTML = NowTime.getTime();
}

setInterval(func_a, 1000);
setInterval(func_b, 1000);
</script>
根据显示结果看到func_b是每秒执行一次的。断定是在a变量的赋值上导致。如何解决呢?在本例子中可以通过引入另外一个变量来解决,例如:
var a = b = 100;
...
function func_b(){
     b--;
     document.getElementById('show').innerHTML = b;
}

再分析下之前代码中IE的执行顺序:
首次加载时,显示99,说明func_a先于func_b执行(本来就是先调用的func_a)
经过一秒后,IE下func_b取到的仍然为99,说明取a的值是发生在func_a对a变量减1之前的,怎么func_b先执行了?
第三秒func_b取到的a为97,怎么又成func_a先执行了,古怪的IE……

补充:
还有一个方法,直接缩短调用变量函数的执行频率,如:
setInterval(func_b, 999);

下一篇 windows下php的ftp函数问题

上一篇 通过js给图片添加热区

相关文章

页面跳转的方式总结

用js统一给链接加属性

UTF8头信息BOM导致的json输出问题

转义符导致json和parse_str解析的两则问题

通过js给图片添加热区

文章分类

开发小提示

  • 1:Mongodb中通过db.yourCollectionName. dataSize()查看某个文档的大小
  • 2:linux下用reset命令恢复查看二进制文件导致的命令行乱码
  • 3:查看MySQL表的索引情况show index from tableName
  • 更多...

交流

  • wangnow(a)126.com