2013-12-18 52 views
0

我想我必須錯過一些非常明顯的東西。使用這段代碼,我想計數並觸發一個計時器的背景變化;但是它不會傳遞該變量,每當定時器調用傳遞未定義變量的函數時。JavaScript如果計數

值得注意:

  • 看着康壽 - 沒有錯誤
  • 我知道jQuery的會可以說是更好,但該網站不能有jQuery的,由於一些討厭的遺留問題(這就是一個整體其他問題)

守則

<script> 
/* Get the body element */ 
var body = document.getElementsByTagName('body')[0]; 
/* Call the function */ 
changebackground(); 
/* Set the starting count */ 
var changecount = 1; 
/* Change function */ 
function changebackground(changecount) { 
    if(changecount=1){ 
     body.style.backgroundImage = 'url(/templates/images/background_1.jpg)'; 
     changecount = 2; 
    } 
    else if (changecount=2) { 
     body.style.backgroundImage = 'url(/templates/images/background_2.jpg)'; 
     changecount = 3; 
    } 
    else { 
     body.style.backgroundImage = 'url(/templates/images/background_3.jpg)'; 
     changecount = 1; 
    } 
setInterval(function(changecount){changebackground();},3000); 
} 
</script> 
+0

你的if語句必須''==不是'=' –

回答

1

刪除changecount作爲參數傳遞給changebackground()。您將它作爲全局變量,因此不需要將其列在參數列表中。

function changebackground() { 
    ... 
} 

那麼你的setInterval電話更改爲:

setInterval(changebackground, 3000); 

而且也將呼叫changebackground之外()。您只需調用一次setInverval(),而不是每次調用changebackground()。

最後,使用==進行比較,而不是=

if (changecount == 1) { 
    body.style.backgroundImage = 'url(/templates/images/background_1.jpg)'; 
    changecount = 2; 
} 
else if (changecount == 2) { 
    body.style.backgroundImage = 'url(/templates/images/background_2.jpg)'; 
    changecount = 3; 
} 
else { 
    body.style.backgroundImage = 'url(/templates/images/background_3.jpg)'; 
    changecount = 1; 
} 
1

你必須把函數的括號內的參數:changebackground(changecount)

(也當你第一次調用函數)

0

您已將changecount設置爲全局變量。 setInterval不會將changecount傳遞給函數。

試試這個:

setInterval(function(){ 
    changebackground(changecount); 
},3000); 

你還錯誤地重新分配變量,你如果塊。使用比較操盤手:

if(changecount == 1){ 

} 
0

您應該使用setTimeout而不是setInterval從該函數反覆裏面調用一個函數:

function changebackground(changecount) { 
. 
. 
. 
setTimeout("changebackground("+changecount+")",3000); // change to this 
} 

還可以使用==檢查,而不是=,如:

if(changecount==1){ ... } 
0

您不會將changecount傳遞給您的匿名函數,而是您已將def把它作爲參數。請改用以下代碼:

<script> 
/* Get the body element */ 
var body = document.getElementsByTagName('body')[0]; 
/* Call the function */ 
changebackground(); 
/* Set the starting count */ 
var changecount = 1; 
/* Change function */ 
function changebackground() { 
    if(changecount=1){ 
     body.style.backgroundImage = 'url(/templates/images/background_1.jpg)'; 
     changecount = 2; 
    } 
    else if (changecount=2) { 
     body.style.backgroundImage = 'url(/templates/images/background_2.jpg)'; 
     changecount = 3; 
    } 
    else { 
     body.style.backgroundImage = 'url(/templates/images/background_3.jpg)'; 
     changecount = 1; 
    } 
    setInterval(changebackground,3000); 
} 
</script> 

這會每3秒執行一次您的功能。無論如何,您不必傳遞變量就可以了。

2

幾件事情是錯的。

比較運算符不正確。您也不需要將變量傳遞給changebackground()函數,因爲變量是全局變量。

這應該工作。

/* Get the body element */ 
var body = document.getElementsByTagName('body')[0]; 
/* Call the function */ 
changebackground(); 
/* Set the starting count */ 
var changecount = 1; 
/* Change function */ 
function changebackground() { 
    if (changecount == 1) { 
     body.style.backgroundImage = 'url(/templates/images/background_1.jpg)'; 
     changecount = 2; 
    } else if (changecount == 2) { 
     body.style.backgroundImage = 'url(/templates/images/background_2.jpg)'; 
     changecount = 3; 
    } else { 
     body.style.backgroundImage = 'url(/templates/images/background_3.jpg)'; 
     changecount = 1; 
    } 
    // line just added for debugging 
    alert(changecount); 
    setInterval(changebackground(), 3000); 
} 

Working Jsfiddle

+0

爲什麼該功能已被觸發所有的時間。注意警報是如何持續來的? –

+0

@ tim.baker因爲最後一行'setInterval(changebackground(),3000);'警報只是爲了顯示它的工作。 –