2012-05-13 33 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操作符会阻止循环继续。