在JavaScript中使用带字符串的开关

MF *_*men 14 javascript string textarea switch-statement

switch分析字符串变量时,我的声明无法正常工作.

输出和输入都是<textarea>.

HTML

<form name="interface">
  <textarea name="output" rows="20" cols="100"></textarea><br>
  <textarea name="input" rows="1" cols="100" onKeyDown="thinkInput(event);"></textarea>
</form>
Run Code Online (Sandbox Code Playgroud)

JavaScript的

function thinkInput(e)
{
    if (e.keyCode == 13)
    {
        sInput = document.interface.input.value;
        document.interface.output.value += sInput;
        aInput = sInput.split(" ");

        switch (aInput[0])
        {
            case "say":
                textOut("You say \""+sInput.substring(aInput[0].length + 1)+"\"");
                break;
            case "move":
                move(aInput[1]);
                break;
            default:
                thinkFail();
                break;
        }
        document.interface.input.value = null;
        alert(aInput[0]);
    }
}
Run Code Online (Sandbox Code Playgroud)

我最后可以看到alert()案件是"说"或"移动".

我第一次尝试"说mudkipz"或"四处走动",一切都按照我想要的方式工作,但在那之后我输入的所有内容都会thinkFail()激发.

rbh*_*hro 1

一个问题是您没有使用该var语句来定义变量。这意味着它们成为“隐式全局变量”,并通过您的不同调用保留。

var sInput = document.interface.input.value;
var aInput = sInput.split(" ");
document.interface.output.value += sInput;
Run Code Online (Sandbox Code Playgroud)

为了进一步诊断问题,您可以使用浏览器中的调试器工具插入断点,并逐步监视 的值sInput并定位问题。