首页 > JavaScript > 解决IE下setTimeout传参数的bug

解决IE下setTimeout传参数的bug

最近一次的开发中遇到了IE下setTimeout传参数的问题,在IE下setTimeout是不会传参数的,例如下面的代码,在IE下就不会传入a,b两个参数

setTimeout(function(a,b){
alert(a+b);
},1000,'hello,','world!');

在实际项目中我们有些需求必须传入参数要setTimeout的function进行处理,那么我们就需要利用js的call及其apply的方法,来解决IE下的setTimeout传参bug:

 if(!+[1,]) { 
     (function(f){  
         window.setTimeout =f(window.setTimeout);  
         window.setInterval =f(window.setInterval);  
     })(function(f){  
         return function(c,t){  
             var a=[].slice.call(arguments,2);  
             return f(function(){  
                 c.apply(this,a)},t)  
             }  
     });  
 }

断桥残雪部落格最新的订阅地址

点击订阅断桥残雪部落格

相关文章

"解决IE下setTimeout传参数的bug"已有3条评论
    sxy8210281

    if (!+[1, ]) {
    (function(f){
    window.setTimeout = f(window.setTimeout);
    })(function(f){
    if (typeof f == ‘function’) {
    return function(c, t){
    var a = [].slice.call(arguments, 2);
    return f(function(){
    c.apply(this, a)
    }, t)
    }
    }
    return f;
    });
    }

    加个判断,判断setTimeout里运行是否是函数。你没加判断,所以setTimeout里运行的是字符串(比如:setTimeout(”fun()”,1000);function fun(){alert(”test”);})就报错了。

    2011年04月21日 18:13 回复 引用

    断桥残雪

    的确是存在这个问题

    2011年04月21日 18:16 回复 引用

    sxy8210281

    @断桥残雪
    不过加了判断,传参问题又有了。。。。看来这个方法得重写了。。。

    2011年04月21日 18:46 回复 引用

文明发言,你好我也好
正在提交,请稍后...
返回顶部