2011-07-03 27 views
1

我正在嘗試在JavaScript中爲它做一個「閃光燈」,並且我發現了一些代碼,可以在互聯網上爲我做這些...但是他們使用了bgcolor和我覺得我應該是正確的,但如果我離開它的bgcolor的代碼只能...所以你知道我的意思,這裏的原文:bgcolor vs background-color vs backgroundColor

<html><head> 
<title>Strobe</title> 

<script> 

function toggleBgColor() 
{ 
    document.bgColor = document.bgColor == '#ffffff' ? '#000000' : '#ffffff'; 

    setTimeout('toggleBgColor()', 70); //in milliseconds 
} 
</script> 
</head> 

<body onLoad='toggleBgColor();'> 
</body></html> 



,這裏是我的變化:


<html><head> 
<title>Strobe</title> 

<script> 

function toggleBgColor() 
{ 
    document.body.style.background-color = document.body.style.background-color == '#ffffff' ? '#000000' : '#ffffff'; 

    setTimeout('toggleBgColor()', 70); //in milliseconds 
} 
</script> 
</head> 

<body onLoad='toggleBgColor();'> 
</body></html> 



我也試圖改變document.body.style.background基色到document.body.style.background和document.body.style.backgroundColor ...他們沒有工作.. 。我究竟做錯了什麼?

回答

7

document.body.style.background-color是無效的標識符(當然,在技術上這是一個有效的標識符[document.body.style.background],然後由運營商[-],接着又有效的標識符[color],但你知道我的意思)。改爲使用document.body.style.backgroundColor。它確實工作,只要其他事情是正確的。 Live example

你說過你已經試過了。我懷疑問題在於你的代碼在別處失敗。舉例來說,你比較'#ffffff'

document.body.style.backgroundColor = document.body.style.backgroundColor == '#ffffff' ? '#000000' : '#ffffff'; 
//                  ^^^^^^^^^^^^ 

的瀏覽器可能不(可能不會)向您報告在您使用指定的顏色相同的格式。在某些瀏覽器中,該值將返回爲"white",而在其他瀏覽器中則會返回爲rgb(255, 255, 255)等。因此,即使背景色爲白色時,比較也會頻繁失敗。你必須處理這種複雜性,解析rgb並對顏色名稱等進行查找。  —或保持一個標誌,就像我上面的例子。


題外話:避免字符串傳遞到setTimeout;相反,直接使用函數引用。你的情況:

setTimeout(toggleBgColor, 70); //in milliseconds 

注意沒有引號,也沒有()(因爲他們通話的功能,我們想傳遞的,而不是它的返回值的參考)。

如果傳遞參數(你不在那裏,只是爲了完整),你可以用一個函數來做到這一點:

setTimeout(function() { 
    doSomething("foo", "bar"); 
}, 70); 
+1

耶我們對此深感抱歉...它確實看起來有點意味着我... – JacKeown

+1

@JacKeown:不用擔心。 :-) –

1

不確定確切的推理,但CSS樣式時通過JavaScript引用永遠不會有 - 在他們身上。

如果檢出W3引用頁面,你會發現他們提供的「定義和用法」爲屬性的JavaScript語法部分:) http://www.w3schools.com/cssref/pr_background-color.asp

你可能是下一個問題,許多瀏覽器(Chrome瀏覽器至少)不要在內部將背景顏色存儲爲十六進制值,而應使用RGB。

所以你的代碼比較最終會比較「rgb(0,0,0)」到「#000000」,因此永遠不會返回true。我的頭快速修復只是在你的代碼中使用RGB值。

關閉我的頭頂,我想像你的代碼的固定版本應該是這個樣子:

function toggleBgColor() 
{ 
    document.body.style.backgroundColor = document.body.style.backgroundColor == "rgb(255, 255, 255)" ? "rgb(0, 0, 0)" : "rgb(255, 255, 255)"; 
    setTimeout('toggleBgColor()', 70); 
} 

不管怎麼說,希望幫助:)