2014-06-17 2 views
-2

Это проверка, над которой я работаю, но, похоже, не получается. Когда я ввожу правильный вывод «12345», он работает, и функция Done() отображает предупреждение «Well Done». Тем не менее, мы вводим 3 неудачных попытки на вывод, он показывает ошибку, но функция Done продолжает активироваться, когда после ошибки программа должна остановиться. Любые решения?Javascript: Почему моя проверка ввода не работает?

<head> 
    <script> 
     valid = false; 

     function Start(valid) { 


      check(valid); 


      if (valid = true) { 
       Done(); 
      } 
      if (valid = false) { 
       alert('End'); 
       return; 
      } 

     } 

     function check(valid) { 

      var PinNum; 
      var Attempts = 0; 


      while (Attempts < 3) { 
       Attempts = (Attempts + 1); 
       PinNum = prompt('Enter the pin number'); 

       if (PinNum == '12345') { 
        alert('Welcome!'); 
        valid = true; 
        return valid; 
        return; 
       } else { 
        alert('Wrong pin number, this is attemp ' + Attempts + ' of 3'); 
       } 
      } 
      alert('Too many failed attempts, giving up'); 
      return; 
     } 


     function Done() { 
      alert("well done") 
     } 
    </script> 
</head> 

<body> 
    <button onclick="Start()">Start</button> 
</body> 

</html> 
+1

Возьмите отладчик и отлаживать код – zerkms

+2

Вы только что прошли 'valid' в качестве аргумента, что делает его локальным для функции проверки, так что изменение' valid' внутри функции проверки не влияет на 'valid' вне функции, это две разные переменные. – adeneo

ответ

1

В вашем if else заявлении вы назначили true в valid вместо сравнения их. Вы можете упростить заявления:

var valid = false; 

function Start() { 
    check(); 

    if (valid) { 
     Done(); 
    } else { 
     alert('End'); 
    } 
} 

function check() { 

    var PinNum; 
    var Attempts = 0; 

    while (Attempts < 3) { 
     Attempts = (Attempts + 1); 
     PinNum = prompt('Enter the pin number'); 

     if (PinNum == '12345') { 
      alert('Welcome!'); 
      valid = true; 
      return; 
     } else { 
      alert('Wrong pin number, this is attemp ' + Attempts + ' of 3'); 
     } 
    } 
    alert('Too many failed attempts, giving up'); 
    return; 
} 


function Done() { 
    alert("well done") 
} 

demo

+0

Но мне нужно убедиться, что действительный - это правда. С вашим методом моя функция Done() не работает. – user3746770

+0

@ user3746770, когда 'valid === true',' if (valid) 'равнозначно' if (true) '. Если это не исправить, есть еще одна проблема – Fabricator

+0

@ user3746770, я очистил ваш код. Он работает сейчас. – Fabricator

0

Несколько пунктов:

  1. Переменная valid в вашей Start функции другой переменной, чем один вы определили вне функции , Каждый раз, когда вы нажимаете кнопку, undefined передается функции. Вы должны ознакомиться с областью JavaScript - http://www.w3schools.com/js/js_function_closures.asp

  2. valid = true является назначением. Единый знак равенства означает «присваивать», тогда как знак двойного или тройного равенства === означает для сравнения. Вы должны прочитать на операторах сравнения - http://www.w3schools.com/js/js_comparisons.asp

  3. Глобальные переменные также считаются плохой практикой, поэтому было бы лучше избежать переменной valid. Вот один из возможных решений - http://www.jasonbuckboyer.com/playground/stack-overflow/javascript-why-does-my-input-validation-not-work.html


<!DOCTYPE html> 
<html> 
<head> 
<script> 
function start() { 
    if (is_valid()) { 
     Done(); 
    } else { 
     alert('End'); 
     return; 
    } 
} 
function is_valid() { 
    var PinNum, 
     Attempts = 0; 
    while (Attempts < 3) { 
     Attempts = (Attempts + 1); 
     PinNum = prompt('Enter the pin number'); 
     if (PinNum == '12345') { 
      alert('Welcome!'); 
      return true; 
     } else { 
      alert('Wrong pin number, this is attempt ' + Attempts + ' of 3'); 
     } 
    } 
    alert('Too many failed attempts, giving up'); 
    return false; 
} 
function Done() { 
    alert("well done") 
} 
</script> 
</head> 
<body> 
    <button onclick="start()">Start</button> 
</body> 
</html> 
Смежные вопросы