2014-03-24 26 views
0
var label = prompt('Label for Vertical Line'); 

該代碼返回我在提示字段中輸入的值label。但我想要一些時間來獲得提示值。使用setTimeout函數提示值

我使用這個代碼:

var label=alertWithoutNotice(); 
function alertWithoutNotice(){ 
    var lab; 
    setTimeout(function(){ 
     lab=prompt('Label for Vertical Line'); 
    }, 1200); 
    return lab; 
} 

但這並不返回任何值。請告訴我什麼是錯的?

+0

函數在返回實驗室後由setTimeout執行 –

+0

那麼我該怎麼辦?你能給我正確的代碼嗎? – Poles

+0

您需要將使用lab的行爲鏈接到setTimeout函數的末尾 –

回答

0

這是一個按時間順序排列的問題。 setTimeout安排一個異步事件。這意味着,在它運行之前,腳本的其餘部分將繼續執行。

結果是您的return lab行在超時回調觸發之前執行。等回報,lab是不明確的那一點。

因此,您不能從異步事件返回值,或者至少沒有意義。

類似jQuery的延遲對象將是您在這裏修復問題的最佳途徑,但我不知道jQuery是否適合您。

+0

如何使用setTimeout函數獲取提示值? – Poles

+0

那麼你已經得到它;只是你不能從它回來,因爲我說的原因。你目前擁有的模式並不容易修復;您的腳本將繼續運行,但對'lab「沒有價值,因爲它在回調觸發之前沒有。 – Utkanos

0

因爲您是使用異步操作撥打這裏最簡單的方法是使用一個回調函數。例如:

alertWithoutNotice(function(label) { 
    alert(label) 
}); 

function alertWithoutNotice(callback) { 
    setTimeout(function() { 
     callback(prompt('Label for Vertical Line')); 
    }, 1200); 
} 

因此認爲它是當label可用alertWithoutNotice通知。當它發生回調被調用。

+0

沒問題......但我如何將'label'值存儲在一個變量中? – Poles

+0

你需要完全改變你的方法。如果你有異步代碼,將它存儲在變量中是沒有意義的。使用回調。 – dfsq