2012-04-27 31 views
0

我想用JavaScript做一個文本幻燈片放映,但是在JavaScript數學底層函數總是返回相同的隨機數。下面的代碼有什麼問題?使用隨機數發生器與計時器給出了每次在Javascript中的相同數字

var randomnumber; 
D=Array(7) 
D[0]='Sunday!' 
D[1]='Monday!' 
D[2]='Tuesday!' 
D[3]='Wednesday!' 
D[4]='Thursday!' 
D[5]='Friday!' 
D[6]='Saturday!' 

window.setTimeout("Tick()", 1000);  

function Tick() 
{ 
    document.write('<marquee><font size="+2">'+D[Math.floor(Math.random()*7)]+'</font></marquee>')  
} 


</script> 
+1

*選框標籤是導致文本向上滾動,向下,向左或向右自動非標準的HTML元素。該標籤最初是在Microsoft的Internet Explorer的早期版本中引入的,並與Netscape的blink元素進行了比較,作爲HTML標準的專有非標準擴展,並存在可用性問題。它被W3C棄用,並且不建議它們用於任何HTML文檔* http://en.wikipedia.org/wiki/Marquee_element – KooiInc 2012-04-27 08:38:16

回答

4

Works fine。但是,在使用setTimeout而不是字符串時,必須傳遞該函數的引用。當你傳遞一個字符串時,setTimeout使用類似eval的過程,使得這種使用方法不安全。

function Tick() {...} 

//pass a reference (no quotes) 
window.setTimeout(Tick, 1000);​ 

setTimeout只觸發達到超時一次時。如果你想要做一個持續的,連續的Tick,那麼最好用setInterval來代替,它會觸發並「重新加載」以再次觸發。


這裏是a modified version of the code,以滿足您的描述

//create the marquee and add to body 
var marquee = document.createElement('marquee'); 
document.body.appendChild(marquee); 

function Tick() { 
    //generate the random text 
    var randomDay = D[Math.floor(Math.random() * 7)]; 

    //change the existing marquee text 
    //textContent for compliant browsers 
    //innerText for IE 
    marquee.textContent = randomDay; 
} 

//tick every second 
window.setInterval(Tick, 1000);​ 
+0

它不能正常工作,它只是一直顯示相同的工作日。 – HOY 2012-04-27 08:23:40

+0

@HOY每次運行時都會顯示不同的工作日。 – Joseph 2012-04-27 08:24:31

+3

@你也許想用setInterval? – 2012-04-27 08:25:50