2010-12-11 192 views
0

我創建了一個頁面,默認情況下爲element1.style.display='none'。現在我有另一個元素element2,點擊時顯示element1。但是,當試圖將element1設置爲設置element1.style.display="block"的函數時,它給我一個錯誤,說element1爲空。我明白這是因爲默認display=none空元素javascript顯示:無

我該如何解決這個問題?這是使用JavaScript,而不是jQuery。

var hash = location.hash; 
alert(hash); 

function init() { 
    if(hash == '#menu-a' || hash == '') { 
     document.getElementById('menu-a').style.display = 'block'; 
    } 
    else if(hash == '#menu-b') { 
     document.getElementById('menu-b').style.display = 'block'; 
    } 
    else { 
     document.getElementById('menu-c').style.display = 'block'; 
    } 
} 

window.onload=init; 
+1

您的問題與'style.display'無關,但爲了幫助您,您必須發佈代碼的相關部分。 – 2010-12-11 16:54:54

+0

我愛人類的語音代碼。我更喜歡真正的代碼。你能否提供一個代碼示例? – 2010-12-11 16:55:51

+0

你可以發佈你的代碼嗎?該錯誤不是因爲顯示樣式設置爲無。由於style屬性,元素不會被視爲null。還有其他事情正在發生。 – charliegriefer 2010-12-11 16:56:01

回答

0

如果隱藏的元素總是以相同的順序,你可以嘗試使用的getElementsByTagName(「」)[arrayindex]訪問它。

+0

對元素的引用應該很好,並且足夠了。這很可能是範圍問題,'element1'從他想訪問的地方看不到。但是,如果沒有代碼,那麼對此沒有人可以說(更好的解決方案是給元素一個ID並使用'getElementById')。 – 2010-12-11 17:07:24

+0

tl; dr版本:getElementById在正確的環境中是最好的解決方案。你是對的。 完整評論:我假設 - 因爲沒有提供任何代碼 - 所有元素都被正確識別並且getElementById仍然不起作用。雖然getElementById當然是最好的解決方案,但我只是想提供一些快速解決方案,試圖以美觀的方式解決這個問題,所以它可以在較小的壓力下工作。 – Cadoc 2010-12-11 17:25:55

+0

下面是代碼var hash = location.hash; alert(hash); 函數init() { 如果(hash =='#menu-a'|| hash =='')document.getElementById (hash =='#menu-b'){document.getElementById('menu-b')。style.display ='block'; } else { document.getElementById('menu-c')。style.display ='block'; } } window.onload = init; – 2010-12-11 17:29:47

0

有沒有機會在dom準備好之前觸發javascript? element1存在於你想要訪問它的那一刻的dom樹中?

+0

應該是評論imo。 – 2010-12-11 17:08:18

1

我明白這是因爲顯示器=無默認

號,是因爲沒有被賦值給變量。

我猜你在期待一個id="element1"的元素自動創建一個名爲element1的JavaScript變量 - 它不應該這樣做。

document.getElementById('element1').style.display = 'block'; 
0

你應該做display:block不久時element被初始化,然後初始化後馬上恢復到display:none

0

我當時有一個類似的問題:並非所有的瀏覽器都以同樣的方式對待display:none(或至少他們的孩子)的元素。我有一些SVG對象放置在兩個DIV中,我想顯示其中一個或另一個。在初始化過程中,我會對SVG元素進行一些操作(更改SVG中的一些文本元素)。這與Firefox完美結合,但Opera,Chrome和IE都失敗了。 在這些瀏覽器中使用display:none與div對齊的元素在嘗試使用document.getElementById(myID)獲取它們時發出空結果。第一個解決方法是僅在初始化(此工作)後設置display:none屬性,但是當我想再次顯示它們時,所有初始化都已丟失(文本標籤全部處於默認狀態)。 我認爲這證明DIV的內容與display:none不知何故從DOM清除,而不是簡單的隱藏。 我也嘗試使用visibility:hidden而不是display:none,但這使頁面佈局變得非常混亂。這似乎在所有瀏覽器的唯一解決辦法是(迄今爲止)的地方我想在「外空」隱藏像it is suggested here...

position: absolute; 
top: -9999px; 
left: -9999px; 
0

的DIV我想你改變了這一切元素的樣式之前即使這個元素是在你的html頁面中生成的。當您嘗試訪問某個網頁中的某個元素時,如果該元素在該時間點的頁面中不可用,則返回Null 我的建議是在完全加載這些元素之後運行該javascript部分,方法是使用如下屬性, onclickonload等...