2013-07-01 85 views
0

我试图让这段代码在while循环而不是if中工作。 如果printLoad_#val为空,我需要num_#的每个瞬间不显示。因此,如果printLoad_1值=无,Num_1将不会显示,然后printLoad_2将检查其num_2是否为空,以此类推。 我遇到的问题是在检查每个部分之前停止功能。 林不知道如果一个工作,将会工作。JavaScript if语句要做 - 而

$(document).ready(function() { 
    if(document.getElementById("printLoad_1").value == "") 
    { 
     document.getElementById('num_1').style.display = 'none'; 
    } 
    if(document.getElementById("printLoad_2").value == "") 
    { 
     document.getElementById('num_2').style.display = 'none'; 
    } 
    if(document.getElementById("printLoad_3").value == "") 
    { 
     document.getElementById('num_3').style.display = 'none'; 
    } 
    if(document.getElementById("printLoad_4").value == "") 
    { 
     document.getElementById('num_4').style.display = 'none'; 
    } 
    if(document.getElementById("printLoad_5").value == "") 
    { 
     document.getElementById('num_5').style.display = 'none'; 
    } 
}); 
+0

是你的问题“我如何使用while循环”或是“我的代码有什么问题”? – Hamish

+0

其中有一点,对不起 – user2089255

+0

好吧,你有什么错误吗? – Hamish

回答

4

你有没有考虑过只是合成字符串而不是这种冗长的结构?事情是这样的:

for(var i=1; i<=5; i++) { 
    if(document.getElementById('printLoad_'+i).value === '') { 
     document.getElementById('num_'+i).style.display = 'none'; 
    } 
} 
+0

这实际上适用于输入,但我无法动态地使其工作。我会用你给我的东西,并试图提出另一个建立这个问题的问题。谢谢! – user2089255

+0

@ user2089255如果通过动态表示可变数量的输入,然后查看我的答案。 – HMR

1

,如果您有打印负载的变化量和num:

var i = 1, 
pl=document.getElementById('printLoad_'+i), 
num = document.getElementById('num_'+i); 
while(pl !== null && num !== null){ 
    if(pl.value === ""){ 
    num.style.display = 'none'; 
    } 
    i++; 
    pl=document.getElementById('printLoad_'+i), 
    num = document.getElementById('num_'+i); 
} 
+0

好吧,这个也适用,我和其他工作脚本有同样的问题。我认为我的代码位置不正确。我会移动东西,看看。 – user2089255

2

假设你正在使用jQuery和你的元素是为了,我会忘了ID的。如果使用普通类,说.printload.num,那么你可以很容易地通过像指数目标元素:

$('.printload').each(function(i){ 
    if (!this.value) $('.num').eq(i).hide(); 
}); 
+0

我看到我能用这个做什么,谢谢! – user2089255

+0

@ user2089255注意printLoad和num是元素的类。 – HMR

+0

是的。当使用jQuery时,只要你看到id =“* _#”类型的构造,你几乎总是可以用类来代替(或除了)id之外的类。 –

1

这里是Ethan的回答略有修饰,其“工作动态”。我也更新它使用jQuery。这可以处理更清洁,如果CSS类层次关系中使用,但会影响到DOM如何需要生成..

for (var i = 1; /* break */; i++) { 
    var printEl = $('#printLoad_' + i) 
    if (printEl.length) { 
     if (!printEl.val()) { 
      $('#num_' + i).css({display: 'none'}) 
     } 
    } else { 
     // No #printLoad_N, guess we're done looking 
     break 
    } 
} 
+0

我明天试试,谢谢! – user2089255

0

每@elclanr的回答是:

使用公共类,并通过索引定位元素,它会简单得多。

设置你的“打印负载”元素class='printLoad'和你的“编号”元素class='num'。然后...

for (i=0;i<document.getElementByClass('printLoad').length;i++) 
{ 
    if (document.getElementByClass('printLoad')[i].value == "") 
    { 
     document.getElementByClass('num')[i].style.display='none'; 
    } 
}