2013-03-22 3 views
0

Я делаю интерактивное приложение с текстовым полем, чтобы практиковать javascript, но я нахожусь для проверки, что случай не отображает текст innerHTML, хотя остальная часть циклов функции. text.innerHTML работает во всех остальных случаях, я что-то упустил?innerHTML failing on case

Javascript

function getNum(input){ 
    if (isNaN(input)) { 
     oldstate = state-1; 
     state = 33; 
     console.log("Loading error Message..."); 
     act(); 
    } 
    else{return(parseInt(input, 10));} 
} 

function act(){ 
    console.log("Case: "+state); 
    input = inputf.value; 
    inputf.value=""; 
    switch(state){ 
     case 0: 
      name = input; 
      text.innerHTML = "Well, hello there, "+name+"! Nice to meet you. What's your age?"; 
      break; 
     case 1: 
      text.innerHTML = "Loading..."; 
      age = getNum(input); 
      text.innerHTML = "So, "+name+" you are "+age+" years old!"; 
      break; 
     case 33: 
      text.innerHTML = "That is NOT a number! Hit Submit to Return."; 
      console.log("Error Successfully loaded!"); 
      state = oldstate; 
      break; 
    } 
    state=+1; 
} 


function getStr(input){ 

} 

Вот мой HTML с текстового поля идентификаторов. Любые предложения по оптимизации также будут оценены.

HTML

<!DOCTYPE html> 
<html> 
    <head> 
     <title>titles are lame</title> 
     <link/> 
     <link rel="stylesheet" type="text/css" href="stylesheet.css"> 
     <script type="text/javascript" src="script.js"></script> 
     <script></script> 
    </head> 
    <body> 
<div id="wrapper"><div id="text">First, let's have your name.</div> 
    <br> 
    <input type='text' id="input"><input type="submit"id="submit" onclick="act()"> 

</div> 
    <script> 
    var state = 0; 
    var inputf = document.getElementById("input"); 
    var text = document.getElementById('text'); 
    var input, name, age,oldstate; 

    document.getElementById("input").addEventListener("keydown", function(e) { 

    // Enter is pressed 
    if (e.keyCode == 13) { act(); } 
}, false); 
    </script> 
    </body> 
</html> 
+0

если вы нажмете на 'enter' он будет работать ... так, что является проблема? – lolo

+0

Для меня ошибка «это НЕ число» не показывает, если вы отлаживаете и не указываете числовое значение при запросе на возраст. Вместо этого он подпрыгнет и скажет, что вам неизвестно лет. Предполагается, что он допустил ошибку. – Signify

ответ

1

Я думаю, что знаю, в чем проблема. В случае 1 вы вызываете метод getNum, он выполняет только штраф в правильном случае, вызывает метод act(), правильно вводит регистр 33, возвращает ошибку и ... затем продолжает выполнение случая 1. Поскольку вы не указали возврат в первом случае функции getNum, возраст имеет неопределенное значение. Он должен работать хорошо, если вы добавите эту строку:

if (!age) return;

только после вызова метода getNum в случае 1.

EDIT: Я просто понял, что вы должны также проверить, как управляется состояние после обнаружения ошибки , Добавление строки, которую я дал вам оставить состояние 33.

0

here Нажмите, чтобы увидеть ответ ..

act() //Changed