2015-09-23 44 views
1

我試圖從用戶得到五個輸入。我知道在一個循環中調用函數(如下面的代碼)會崩潰,因爲所有的prompt()函數都會被同時調用。與提示使用循環()

for(var i = 0; i < 5; i++) { 
    prompt(); 
} 

有什麼解決方案呢?我看到其他片段使用「超時」,並在每次函數調用之間等待一段時間,但是當用戶可以花費盡可能多的時間來輸入提示時,代碼是否仍然有效?

回答

5

我知道在一個循環中調用函數(如下面的代碼)會崩潰,因爲所有的prompt()都被同時調用。

That't不在這裏,因爲prompt的情況是阻塞功能,就像alert。即迭代(或更確切地說是代碼執行)只在提示窗口關閉後繼續。

您可以將所有的值添加到一個數組,像這樣:

var inputs = []; 
for(var i = 0; i < 5; i++) { 
    inputs.push(prompt()); 
} 
console.log(inputs); 

這是否是最佳的用戶體驗是不同的問題...

+0

很好的答案。需要注意的是,如果我在同一個循環中通過5個提示訪問網站,我會盡快關閉瀏覽器。想象一下5個以上的提示讓我頭腦發生崩潰。 –

+0

我試過使用你的代碼並在repl.it中運行它 然而,它在第一次輸入後被掛起並凍結。有什麼我失蹤的? https://repl.it/BK26/1 – feedobesebison

+0

@feedobesebison:可能是repl.it的問題。在這裏工作得很好:http://jsfiddle.net/b3q666y2/1/ –

0

無需超時,則提示符會在其他代碼執行之前等待用戶輸入(確定,取消),這意味着單擊確定後會出現下一個提示。超時只是有用的,這樣人們不會意外按兩下確定連續並看到提示出現。