2009-10-21 162 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