Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript if语句在执行while时_Javascript_Do While - Fatal编程技术网

javascript if语句在执行while时

javascript if语句在执行while时,javascript,do-while,Javascript,Do While,我试图让这段代码在while循环中而不是if中工作。 如果printLoad_35;val为空,我需要不显示num_35;的每个瞬间。因此,如果printLoad_1 value=nothing,Num_1将不显示,然后printLoad_2将检查其Num_2是否为空,依此类推。 我遇到的问题是函数在检查每个部分之前停止。 我不确定一段时间是否有效 $(document).ready(function() { if(document.getElementById("printLoad_1

我试图让这段代码在while循环中而不是if中工作。 如果printLoad_35;val为空,我需要不显示num_35;的每个瞬间。因此,如果printLoad_1 value=nothing,Num_1将不显示,然后printLoad_2将检查其Num_2是否为空,依此类推。 我遇到的问题是函数在检查每个部分之前停止。 我不确定一段时间是否有效

$(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';
    }
});

您是否考虑过只合成字符串而不是这种冗长的构造?大概是这样的:

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

for(var i=1;i如果您的printLoad和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);
}

假设您使用的是jQuery,并且您的元素是有序的,我会忘记ID。如果您使用公共类,例如
.printload
.num
,那么您可以通过如下索引轻松地将元素作为目标:

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

下面是对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
    }
}

根据@elclanr的回答:

使用公共类和按索引的目标元素,会简单得多

将“printLoad”元素设置为
class='printLoad'
,将“num”元素设置为
class='num'

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

for(i=0;iIs)您的问题是“如何使用while循环”还是“我的代码有什么问题?”?两者兼而有之,抱歉,你有什么错误吗?诊断:似乎是iditis的一个例子。使用普通类,并通过索引将元素作为目标,这会简单得多。iditis?更像是缺乏经验。无论如何,谢谢……这实际上对输入有效,但我很难让它动态工作。我将使用你给我的东西并尝试一下在此基础上提出另一个问题。谢谢!@user2089255如果动态指的是可变数量的输入,请看我的答案。@user2089255请注意printLoad和num是元素的类。是的。使用jQuery时,只要您看到id=“*\u89255”类型构造,您几乎总是可以使用类而不是(或除了)id来更好地执行此操作。这也很有效,与我在其他工作脚本中遇到的问题相同。我想我的代码放在了错误的位置。我将四处移动并查看。我明天再试,非常感谢!