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ステートメントを指定しなかったためです関数の最初のケースであるgetNumage の値は未定義です。次の行を追加すると、正常に動作するはずです。

if (!age) return;

getNumケース 1のメソッドを呼び出した直後。

編集:エラーを検出した後、状態がどのように管理されているかを確認する必要があることに気付きました。私があなたに与えた行を追加すると、33 の状態が残ります。

于 2013-03-22T15:28:14.997 に答える
0

答えを見るにはここをクリックしてください..

 act() //Changed
于 2013-03-22T15:36:13.247 に答える