2012-05-13 77 views
0

我有一系列的div,我用css顯示隱藏:none ;.陣列的第一個成員

<div id="" class="hidden_row">some code</div> 
<div id="" class="hidden_row">some code</div> 
<div id="" class="hidden_row">some code</div> 

我也有一個onclick「addRow();」按鈕,函數,該函數被設計爲通過將其css聲明更改爲「display:block;」來在每次點擊時順序顯示一個隱藏行。 的JavaScript看起來像這樣:

function addRow(){ 
    var hiddenrow = getElementsByClassName(document, "*", "hidden_row"); 

    for(var i=0; i< hiddenrow.length; i++){ 
     if(hiddenrow[i].style.display = "none"){ 
      hiddenrow[i].style.display = "block"; 
     } 
    } 
} 

然而,功能上不執行改變數組的1名成員(這是想什麼我),發現隱藏的行,並顯示它們。我如何調整我的功能,使其按預期工作?

+2

不要一次循環遍歷所有它們? –

回答

5

你有一個錯字在你的if語句

if(hiddenrow[i].style.display = "none"){ 

應該

if(hiddenrow[i].style.display == "none"){ 

編輯: 注意.style.display只檢查內嵌式的,所以你必須要檢查爲

if(hiddenrow[i].style.display != "block"){ 

取而代之的是,因爲這更好地支持你想要的東西

正如Darhazer所說,如果你想一次只顯示一個,你需要在找到你想要的之後加上break;

工作的jsfiddle:http://jsfiddle.net/STGhq/

和修改後的功能

function addRow(){ 
    var hiddenrow = document.getElementsByClassName("hidden_row"); 
    for(var i=0; i< hiddenrow.length; i++){ 
     if(hiddenrow[i].style.display != "block"){ 
      hiddenrow[i].style.display = "block"; 
      break; 
     } 
    } 
}​ 


解決的問題是 element.style只拉電流內嵌樣式,我發現 this article,通過使用 window.getComputedStyleelement.currentStyle圍繞它得到,其中拉動當前 風格計算,而不是隻是內聯聲明。

工作的jsfiddle用新的代碼 http://jsfiddle.net/STGhq/2/

+0

實際上,當我按照您的建議更改代碼時,它完全停止運作。 – kjarsenal

+0

@kjarsenal - 因爲'var hiddenrow = getElementsByClassName(document,「*」,「hidden_​​row」);'應該是'document.getElementsByClassName'。 –

+0

和我沒有任何地方支持getElementsByClassName與3參數 –

1

首先,糾正你的代碼,因爲你是在如果分配值,而不是檢查平等。接下來,如果你可以打破循環,那麼只顯示第一個元素,顯示「none」。

for(var i=0; i< hiddenrow.length; i++){ 
     if(hiddenrow[i].style.display == "none"){ 
      hiddenrow[i].style.display = "block"; 
      break; 
     } 
    } 
1

嗯,你是否在條件語句中輸入'='作爲'='?

0

如果您只希望將其應用於第一行,並且僅當它的顯示爲「無」,則不要循環。所以,應該使用的第一個項目在數組中,像這樣:

if (hiddenrow.length > 0 && hiddenrow[i].style.display == "none"){ 
    hiddenrow[0].style.display = "block"; 
} 

OTOH,如果你只是想這適用於具有顯示=「無」的第一個項目,無論它是在第一項列表,然後執行:

for(var i=0; i< hiddenrow.length; i++){ 
    if(hiddenrow[i].style.display == "none"){ 
     hiddenrow[i].style.display = "block"; 
     break; 
    } 
} 

break操作符會阻止循環繼續。