function showMsg(id,msg){
var obj = $(id);
if(!obj){return;}
obj.style.display = 'block';
obj.innerHTML = msg;
window.setTimeout("obj.style.display = 'none'",3000); //这里为什么效果
}

解决方案 »

  1.   


    function showMsg(id,msg){
        var obj = $(id);
        if(!obj){return;}
        obj.style.display = 'block';
        obj.innerHTML = msg;
        str = setTimeout(function (){
        obj.style.display = 'none';; //这里为什么效果
        clearInterval(str);
        }, 3000);
    }
      

  2.   

    setTimeout中第一个参数要么是函数 要么是一个函数名字符串 总之是一个函数 而不是单纯的字符串
      

  3.   

    lz这么写也可以,主要是这么写的话,setTimeout会建一个函数,这个函数变量的作用域为window,无法取到showMsg函数作用域中变量了,就是说这里没法取到obj了。var obj;   //一定要这么写的话,把obj定义为全局变量吧,推荐用2楼的方式实现
    function showMsg(id,msg){
        obj = $(id);
        if(!obj){return;}
        obj.style.display = 'block';
        obj.innerHTML = msg;
        window.setTimeout("obj.style.display = 'none'",3000); //这里为什么效果
    }
      

  4.   

    window.setTimeout(arg1, arg2);第一个参数如果是字符串的话,里面的变量必须是全局变量。