请原谅我的愚蠢问题,但我昨天才开始自学 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] 删除。
我来说两句