0

Everything else on my page works perfectly. The alert(userinput.value); works perfectly... but the statements do not call the button. The code only returns the valid commands in the else statement.

      function btn_go_click(){
           var userinput = document.getElementById("txtcommand");   
           alert(userinput.value);         
           if (userinput.value === ("N" || "North")){
              btn_North_click();                
           }else if (userinput.value === ("E" || "East")){ 
              btn_East_click();
           }else if (userinput.value === ("S" || "South")){
              btn_South_click();
           }else if (userinput.value === ("W" || "West")){ 
              btn_West_click();                       
           }else{
            UpdateText ("Valid commands are \"n\", \"e\", \"s\", \"w\"");                   
          }
       }
4

4 回答 4

6

The result of ("N" || "North") will always be "N".

So if (userinput.value === ("N" || "North")) is just same as

if (userinput.value === "N"), you need to write:

 if (userinput.value === "N" || userinput.value === "North")

Or you could write like below (ignore case):

if (['n', 'north'].indexOf(userinput.value.toLowerCase()) > -1) {

} // ... and so on
于 2012-10-05T01:56:38.573 回答
0

我知道这应该是一个评论,发表评论太长了。

如果你正在制作一款冒险游戏,你最好制作一个“命令列表”,而不是试图做出巨大的“如果-那么”。

为实例

var cmds = [
  {
    keywords: ["n", "north"],
    help: "Move north, if you can.",
    func: move_north
  },
  {
    keywords: ["get", "take"],
    help: "take an object.",
    func: get_object
  }
];

这种方法还为您提供了内置命令列表和帮助文件。

此外,我喜欢让命令解析器采用 3 个字母的快捷方式,这样我就不必输入整个单词。然而,这只是锦上添花。

于 2012-10-05T02:13:24.217 回答
0

如果您想忽略大小写,最简单的方法是将所有内容都大写。

val valueToCompare = userinput.value.toUpperCase();

然后只需使用大写的所有值(“NORTH”而不是“North”),您甚至不必关心用户输入的大小写。

你的ifs被打破了。这是您修复的代码:

function btn_go_click(){
    var userinput = document.getElementById("txtcommand").value.toUpperCase();   
    alert(userinput.value);         
    if (userinput === "N" || userinput === "NORTH") {
        btn_North_click();                
    } else if (userinput === "E" || userinput === "EAST") {  
        btn_East_click();
    } else if (userinput === "S" || userinput === "SOUTH") {
        btn_South_click();
    } else if (userinput === "W" || userinput === "WEST") { 
        btn_West_click();                       
    } else {
        UpdateText ("Valid commands are \"n\", \"e\", \"s\", \"w\"");
    }
}
于 2012-10-05T02:00:09.050 回答
0

如果您想忽略大小写,您可以将所有内容转换为小写或大写,或者使用忽略大小写的正则表达式,例如

function btn_go_click(){
    var userinput = document.getElementById("txtcommand");   
    var value = userinput.value.toLowerCase();

    if (value == "n" || value == "north") 

或者

    var reN = /^(n|north)$/i;

    if (reN.test(value))

您可能还想从输入中修剪前导和尾随空格,以便改进匹配。

于 2012-10-05T02:03:10.560 回答