【问题标题】:setTimeout not working,am I missing something here?setTimeout 不起作用,我在这里遗漏了什么吗?
【发布时间】:2009-10-12 15:53:47
【问题描述】:

我知道它非常基础,但我就是无法让它发挥作用。它不断抛出“Object Expected”错误......

 $(document).ready(function(){   
    setTimeout('showMessage()', 1000); 

    function showMessage() { 
        alert('abc');
    } 
    });

【问题讨论】:

    标签: javascript jquery settimeout


    【解决方案1】:

    您遇到了范围界定问题:showMessage() 仅在匿名函数中可见,但在评估 setTimeout() 的参数时,运行时已离开范围。

    将函数直接用作setTimeout() 的参数并摆脱邪恶[TM] 字符串评估:

    setTimeout(showMessage, 1000); 
    

    【讨论】:

      【解决方案2】:

      setTimeout 方法最好与函数一起使用,而不是字符串。因此,最好的方法是这样的:

      $(document).ready(function() {
          setTimeout(showMessage, 1000);
      });
      
      function showMessage() { 
          alert('abc');
      }
      

      【讨论】:

      • +1 表示“最佳使用”,正确暗示它可以与字符串一起使用(但当然不应该)。
      【解决方案3】:

      问题在于 showMessage 函数是在 ready 事件中声明的,而 setTimeout("showMessage()", 1000) 将在全局范围内查找它。您可以将其声明移动到全局范围,例如out of ready 事件,或使用 SLaks 答案:setTimeout(showMessage, 1000)

      【讨论】:

        【解决方案4】:

        你已经用引号包裹了你的函数,所以它把它当作一个字符串,而不是它所期望的对象,所以,就像 SLaks 说的:

         $(document).ready(function(){   
            setTimeout(showMessage, 1000); 
        
            function showMessage() { 
                alert('abc');
            } 
            });
        

        【讨论】:

        • 如果投反对票,请提供原因。我看不出这里有什么原因。
        • 我没有投反对票,但有人这样做的原因很可能是 setTimeout() 的字符串参数非常好:问题在于变量的可见性
        猜你喜欢
        • 2021-10-24
        • 2012-11-23
        • 2011-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多