Javascript 输入前浏览器崩溃

Javascript 输入前浏览器崩溃,javascript,Javascript,我正在用javascript编写一个程序,这应该是一个快节奏的打字挑战。问题是,我检查输入的脚本在我输入任何内容之前就崩溃了我的浏览器。我以为它会暂停等待输入,但似乎我错了 以下是使我的浏览器崩溃的函数: var level1 = function () { var letter; var ascii; var ncorrect = 0; var input = "0"; var timedout = false; document.getElementById('prompt').text

我正在用javascript编写一个程序,这应该是一个快节奏的打字挑战。问题是,我检查输入的脚本在我输入任何内容之前就崩溃了我的浏览器。我以为它会暂停等待输入,但似乎我错了

以下是使我的浏览器崩溃的函数:

var level1 = function () {

var letter;
var ascii;
var ncorrect = 0;
var input = "0";
var timedout = false;

document.getElementById('prompt').text = "Level 1 : Type Here!" // this is supposed to change text on the page... It doesn't work but not that's not my question.

while (ncorrect < 26){

    timedout = false;
    setTimeout(timedout = true, 5000);
    ascii = Math.floor(Math.random() * 122) + 97;   // ASCII's of lower case letters
    letter = String.fromCharCode(ascii);
    document.getElementById('letter').text = letter;

    input = document.getElementById('keyinput');
    console.log(input);

    if(!timedout && input === letter) {
        clearTimeout();
        ncorrect++;
    }
    else {
        ncorrect = 0;
    }
}

return 0;

}
var level1=函数(){
var字母;
var-ascii;
var ncorrect=0;
var input=“0”;
var-timedout=false;
document.getElementById('prompt').text=“Level 1:在此处键入!”//这应该会更改页面上的文本……它不起作用,但这不是我的问题。
而(n正确<26){
timedout=false;
设置超时(timedout=true,5000);
ascii=Math.floor(Math.random()*122)+97;//小写字母的ascii
字母=String.fromCharCode(ascii);
document.getElementById('letter')。text=letter;
输入=document.getElementById('keyinput');
控制台日志(输入);
如果(!timedout&&input==字母){
clearTimeout();
ncorrect++;
}
否则{
n正确=0;
}
}
返回0;
}
如果这不是一个简单的修复。。。 监控输入和响应正确答案的更好方法是什么


谢谢,我知道这是一个有点宽泛的问题,但我正在努力弄清楚我在寻找什么

您可以使用
setTimeout()
并传入一个函数,该函数在您指定的时间之后检查输入。这里有一种实现方法:

setTimeout(函数(){
var textbox=document.getElementById('textbox');
如果(textbox.value!==“敏捷的棕色狐狸跳过了懒狗”。{
警惕('你没有通过');
}否则{
警惕(“恭喜!”);
}
}, 5000);
输入短语“敏捷的棕色狐狸跳过懒惰的狗。”

Javascript已经在后台运行事件循环,因此您不需要自己的循环。此循环持续运行,并检查是否有任何事件在任何HTMLDOM元素上触发。例如,如果单击了按钮,事件循环将拾取该元素的单击事件。您可以将事件处理程序添加到元素中,这些事件处理程序是在该元素发生某些事件时激发的函数。您要做的是为事件设置一个事件处理程序,该事件在您的输入区域中的文本(我假设用户正在键入输入或textarea标记)被激发时激发

例如,下面的简单程序将创建一个100个随机字符长的打字挑战

var ncorrect = 0;
var timedout = false;
//select an empty paragraph to fill with text
var challengeText = document.getElementbyId("challengeText");
challengeText.innerHtml = "";
//Append 100 random characters to the paragraph
for (var i=0;i<100;i++) {
     challengetText.innerHtml += String.fromCharCode(Math.floor(Math.random() * 122) + 97);
 }

 //Check the number of characters typed since the last the loop hit the element
 var lastCharsTyped = 0;
 var charsTyped = 0;

 //Grab the user input
 var input = document.getElementById("userInput")

 //Set the event handler to fire when the user presses a key (technically, when they lift their finger
 input.onkeyup = function(keyEvent){
     //Ugly ternary to deal with the fact that not all browsers use the same api. If you haven't seen this before it means if which is a key of keyEvent then keyCoe is event.which, otherwise it's event.keyCode
    var keyCode = ('which' in keyEvent) ? keyEvent.which : keyEvent.keyCode;
    //Check if the key pressed is equal to the character in the text to match at the same position
    if (keyCode === challengeText.innerHtml.charCodeAt(input.value.length)) { ncorrect ++} else {ncorrect = 0;}
 }
var ncorrect=0;
var-timedout=false;
//选择要用文本填充的空段落
var challengeText=document.getElementbyId(“challengeText”);
challengeText.innerHtml=“”;
//在段落中添加100个随机字符

对于(var i=0;iget去掉while,并没有任何原因,它会导致您的崩溃。您还需要向setTimeout传递一个程序,而不是一个表达式。我应该能够为我的代码实现这一点。谢谢!若并没有更好的结果,我很快就会接受。谢谢,这肯定会有帮助。是的,我的变量是Visual Studio中C遗留下来的习惯。