Javascript: Есть ли ограничение для «еще, если» заявления? - PullRequest
0 голосов
/ 11 января 2012

Я получаю значение из текстового поля.У меня есть один оператор 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;

    }

}

Пожалуйста, помогите.Спасибо

Ответы [ 5 ]

4 голосов
/ 11 января 2012

Проблема в том, что если 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).

4 голосов
/ 11 января 2012

Количество if операторов не ограничено.Проблема заключается в том, что один из предыдущих операторов if перехватывает проверяемый вами случай.

Просмотрите все операторы if для случая, когда вы тестируете, и посмотрите, не запутался ли предыдущий оператор.

1 голос
/ 11 января 2012

нет никакого способа, которым ударил бы последний «else-if»: если textVal содержит «%», он перейдет ко второму «else-if», и если у него нет «%», он будетперейти к предыдущему.так что последний, если никогда не ударил.

1 голос
/ 11 января 2012

Это происходит потому, что ваше else if(txtVal.indexOf("%") != -1) истинно (так, секунда, если сверху), но условие для «если» внутри него не верно (поэтому оно не переходит в «возврат».

0 голосов
/ 11 января 2012

Нет ограничений по вложенности.Существует логический барьер для перехода к вложенным предложениям if else.Изучите использование

switch(caseVariable){
  case 1:  document.write("caseVariable = " + 1);
           break;
  case 35:  document.write("caseVariable = " + 35);
           break;
  default: break;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...