0

我正在制作一个带有文本字段的交互式应用程序来练习 javascript,但我正在寻找验证,尽管其余的函数循环但该案例不显示 innerHTML 文本。text.innerHTML 适用于所有其他情况,我在这里遗漏了什么吗?

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){

}

这是我的带有文本字段 id 的 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>
4

2 回答 2

1

我想我知道问题是什么。在案例1中,您调用该getNum方法,它在正确的案例中执行得很好,调用该act()方法,正确进入案例33,返回错误,然后......然后继续执行案例1。因为您没有在中指定return语句函数的第一种情况getNum,age 有一个未定义的值。如果您添加此行,它应该可以正常工作:

if (!age) return;

getNum就在案例 1 中调用该方法之后。

编辑:我刚刚意识到您还应该在检测到错误后检查状态是如何管理的。添加我给你的行将留下 33 的状态。

于 2013-03-22T15:28:14.997 回答
0

点击这里查看答案。。

 act() //Changed
于 2013-03-22T15:36:13.247 回答