Javascript for 循环中嵌套 if 语句的正确语法

哔哔哔123123

请原谅我的愚蠢问题,但我昨天才开始自学 Javascript 和 HTML。我正在尝试复制一种类型赛车游戏,但由于其中的 if 语句,似乎无法完成 for 循环。

请参阅以下内容:

    <script>
        var current = document.getElementById('currentWord');
        function inputMatch(){
            var input = document.getElementById('inputfield').value;
            if(input.length > current.innerHTML.length){
                current.className = "currently-wrong";
            }
            else{
                for (var i = 0; i < input.length; i++){
                    if(input[i] != current.innerHTMl[i]){
                        current.className = "currently-wrong";
                    };
                    else{
                        current.className = "currently-correct";
                    }
                };
            }
        }
    </script>

应该输入的单词被命名为current

我在一个名为input的变量中获取用户输入

我想遍历输入以查看它是否与current匹配如果到目前为止匹配,我希望将类更改为“当前正确”,否则,我希望将其更改为“当前错误”。

除了在 for 循环中放置 alert(i) 之外,我不知道任何调试方法。

当我这样做时,没有输出。如果我删除 else 语句并保留警报(i),则唯一的输出是不同的“0”,这意味着 i 保持为 0 并且不迭代。

如果我删除 if 语句和 else 语句,则在我输入输入时输出是正确的。

也就是说,如果我输入

“一个”-> 0

"p" -> 0, 1

"p" -> 0, 1, 2

"l" -> 0,1,2,3

"e" -> 0, 1, 2, 3, 4

这是预期的输出/警报,但只有在删除 if 语句时才有效。关于调试这个有什么建议吗?

莫里斯·尼诺

我建议您使用 let 和 const 而不是 var 来减少不需要的副作用。也不应该有 ; 在 if 括号之后。

而当if语句匹配时,意味着输入错误,则无需进一步检查(其实中间只输入一个错误字母也会导致错误)。因此,只需使用 break 跳出循环即可;

const current = document.getElementById('currentWord');

function inputMatch(){
  const input = document.getElementById('inputfield').value;

  if(input.length > current.innerHTML.length){
    current.className = "currently-wrong";
  }
  else{
    for (var i = 0; i < input.length; i++){
      if(input[i] != current.innerHTML[i]) {
        current.className = "currently-wrong";
        break;
      }
      else {
        current.className = "currently-correct";
      }
    };
  }
}
.currently-wrong {
  background-color: red;
}
.currently-correct {
  background-color: green;
}
<div id="currentWord">apple</div>
<input id="inputfield" onkeyup="inputMatch()"/>

但是,您也可以像这样以更漂亮的方式编写它:

const current = document.getElementById('currentWord');
const inputField = document.getElementById('inputfield');

const inputMatch = () => {
  const input = inputField.value;

  const matches = current.innerHTML.startsWith(input);
  current.className = matches ?  "currently-correct" : "currently-wrong";
}
.currently-wrong {
  background-color: red;
}
.currently-correct {
  background-color: green;
}
<div id="currentWord">apple</div>
<input id="inputfield" onkeyup="inputMatch()"/>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章