2009-10-21 47 views
0

我已经使用内setTimeout的,即下面的JavaScript,但我有问题:setTimeout的使用问题

function setUrl() 
{ 
    // Get system URL details 
    var url_path = new String(window.location.pathname); 

    var new_url; 

    new_url = window.location.host; 
    } 
    setTimeout("setValue('ONE_UP_URL',new_url);",2000); 
} 

但由于某些原因,我得到了错误:“NEW_URL”是不确定的。

将非常感谢您的通话使用的setTimeout这个JavaScript函数的帮助。

谢谢。

回答

7

不要使用字符串作为setTimeout函数调用的第一个参数,使用匿名功能。

您也有一个额外的大括号:

function setUrl() { 
    // Get system URL details 
    var url_path = window.location.pathname, 
     new_url = window.location.host; 

    setTimeout(function() { 
    setValue('ONE_UP_URL',new_url); 
    }, 2000); 
} 

如果你使用一个字符串,它会进行评估,这是不是真的recommended

使用eval(及其亲属,FunctionsetTimeoutsetInterval)评估代码被认为是危险的,因为他们将执行你通过与呼叫者的特权码,几乎所有的时候,有一种变通方法避免它们。

其他小事:

  • 在代码字符串构造函数的调用是多余的,因为window.location.pathname已经是一个字符串。
  • 您可以在single var语句中声明你的函数变量。
+0

+1的额外细节。 – ChaosPandion 2009-10-21 04:00:02

6

你有一个流氓右括号。要么有更多的代码缺失,或者你只需​​要删除它。 (以上的setTimeout线)

此外,应更换此:

setTimeout("setValue('ONE_UP_URL',new_url);",2000); 

与此:

setTimeout(function() { setValue('ONE_UP_URL', new_url); }, 2000); 
1

尝试更新的东西,如:

function setValue(s, variable) { 
    alert(s); 
    alert(variable); 
} 

function setUrl() 
{ 
    // Get system URL details 
    var url_path = window.location.pathname, 
     new_url = window.location.host; 

    setTimeout(
    function() { 
     setValue('ONE_UP_URL',new_url); 
    }, 2000); 
} 
+0

这是正确答案的第三个副本。你不应该删除它吗? – ChaosPandion 2009-10-21 03:55:20

+0

你以前真的没见过重复的答案吗?在我的解决方案中,我实际上花时间写了setValue函数来演示,除了清理更多的代码。 – 2009-10-21 03:56:40

+0

单行上的多个声明如何更清晰*?你实际上减少了可读性。 – 2009-10-21 04:00:28