我从文本字段中获取价值。我有一个if if和其他if语句。
即使条件为真,否则最后一个if的问题仍未执行。
如果我改变了最后的其他,如果它执行并提供警报。如果语句没有执行,我将其更改回else。否则如果在此之前是好的,因为它在某个特定条件下正在触发/执行。
function Valcheck()
{
var txtVal = document.getElementById("sometextField").value;
if(txtVal =="%")
{
alert("% is only allowed with other characters.");
return;
}
else if(txtVal.indexOf("%") != -1)
{
if((txtVal.indexOf('%')) != (txtVal.length-1))
{
alert(" % is only allowed at the end.");
return;
}
}
else if(txtVal.indexOf(",") != -1)
{
alert("Comma or comma separated values are not allowed.");
return;
}
else if(( txtVal.length >0) && (txtVal.indexOf("%") == -1))
{
alert("Please enter % at the end of the value.");
return;
}
else if( txtVal.length > 11 )
{
alert(" Value can't be greater than 11 characters.");
return;
}
}
请帮忙。感谢
答案 0 :(得分:4)
if
语句的数量没有限制。问题在于,之前的if
语句中的一个会捕获您正在测试的案例。
针对您的测试案例,查看每个if
语句,看看它是否被前一个案例抓住了。
答案 1 :(得分:4)
问题是,如果txtVal.length > 11
,则满足以下要求:
else if(txtVal.indexOf("%") != -1)
或满足:
else if(( txtVal.length >0) && (txtVal.indexOf("%") == -1))
这样它永远不会到达else if( txtVal.length > 11 )
。你需要改变这个:
else if(txtVal.indexOf("%") != -1)
{
if((txtVal.indexOf('%')) != (txtVal.length-1))
{
alert(" % is only allowed at the end.");
return;
}
}
到此:
else if(txtVal.indexOf("%") != -1 && txtVal.indexOf('%') != (txtVal.length-1))
{
alert(" % is only allowed at the end.");
return;
}
这样它就不会“捕获”txtVal.indexOf('%') == (txtVal.length-1)
。
答案 2 :(得分:1)
这是因为你的else if(txtVal.indexOf("%") != -1)
是真的(所以,如果从顶部开始,则是第二个),但条件为"如果"在里面它是不正确的(所以它不会去"返回"。
答案 3 :(得分:1)
没有办法击中最后一个'else-if': 如果textVal中有'%',它将转到第二个'else-if' 如果它没有'%',它将转到最后一个之前的那个。 所以最后如果永远不会被击中。
答案 4 :(得分:0)
if else嵌套没有限制。获取嵌套if else子句存在逻辑障碍。考虑使用
switch(caseVariable){
case 1: document.write("caseVariable = " + 1);
break;
case 35: document.write("caseVariable = " + 35);
break;
default: break;
}