首页 新闻 搜索 专区 学院

为什么在window.onload下在使用window.setInterval会不管用?

0
[已解决问题] 解决于 2015-03-09 13:03

Document

<script type="text/javascript">
    window.onload=function(){
        function show() {
            
        var date = new Date();
        var hour = date.getHours();
        var minutes  = date.getMinutes();
        var seconds = date.getSeconds();
        var text = "现在是北京时间:"+hour+":"+minutes+":"+seconds+"!!";
        document.getElementById("stime").innerHTML=text;
        }
        setInterval("show()",1000);
    }
</script>

 

 
小云仙哥的主页 小云仙哥 | 初学一级 | 园豆:105
提问于:2015-02-27 23:41
< >
分享
最佳答案
0

function show 运行完后,就不存在了

就不能把function show的定义拿到外面么?

非要写些怪异嵌套的东西,把自己搞晕

奖励园豆:5
arg | 小虾三级 |园豆:1047 | 2015-02-28 13:21
其他回答(5)
0

试试:

setInterval(show,1000);

I,Robot | 园豆:9563 (大侠五级) | 2015-02-27 23:53
0

onload才执行的显然不对,把onload去掉就可以了

茂茂 | 园豆:2860 (老鸟四级) | 2015-02-28 09:19
0
setInterval(function(){
            show();
        },1000);
//or
// setInterval(show, 1000);
坐观风云 | 园豆:211 (菜鸟二级) | 2015-03-01 13:09
0

解决方法

window.show = function () {
    var date = new Date();
    var hour = date.getHours();
    var minutes = date.getMinutes();
    var seconds = date.getSeconds();
    var text = "现在是北京时间:" + hour + ":" + minutes + ":" + seconds + "!!";
    document.getElementById("stime").innerHTML = text;
}
setInterval("show()", 1000);

因为当调用setInterval时传递字符串函数,它会从全局作用域window里查找相关函数,但你的函数定义在onload方法,访问不到,因此不管用。

skpark | 园豆:200 (初学一级) | 2015-03-01 21:38
0

setInterval两种方式(请参考MDN

1.setInterval(func,delay[p,p2..])

2.setInterval(code,delay)(您现在使用的是这种方式)

 

一般情况下,都是使用第一种。不建议使用第二种。

因为第二种执行时会使用到eval。

像@S.K.Park说的这样,eval会从全局域window中查找

所以,你写的那个程序时执行不下去的。会报ReferenceError错误。

 

如果你执意要使用第二种方式,那么,请把你的show方法挂载到全局变量上面

Vivian软陶公仔 | 园豆:284 (菜鸟二级) | 2015-03-03 10:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册