【问题标题】:Logic regarding waiting for user input before iteration in JavascriptJavascript迭代前等待用户输入的逻辑
【发布时间】:2016-12-19 15:21:41
【问题描述】:

我制作了某种类型的猜词游戏,基于向用户显示某些单词的描述并将用户输入的值与预定义的单词进行比较。我实现的逻辑如下:

  1. 在全局范围内,有一个数组,里面有对象(例如 arr = [ {desc1, word1}, {desc2, word2}......]
  2. 单击“开始”按钮时,我想显示第一个对象的描述(desc)。 (例如 arr[0].desc )
  3. 用户输入一些单词并按下“提交”按钮。
  4. 按下“提交”时,程序会检查用户输入的单词是否与数组中的单词相同(第一次运行时为 word1)。然后,程序会根据比较结果进行随机处理。
  5. 程序然后迭代到数组中的下一个对象,并继续这个直到最后一个对象。
  6. 然后在迭代结束后显示最终结果。

我遇到的问题是循环猖獗 (infinte-loop) 或者不做直接进入最终结果 任何东西。

我不知道如何让程序等待/停止,直到用户输入内容并按下提交然后迭代循环。也不能使用 if-else 循环,因为除非我使用某种 setTimeout() 让用户有足够的时间输入内容,否则 else 将始终为真,但它看起来很笨重,而且只是一些创可贴的方法。

解决这类问题还有其他逻辑吗?谢谢。

【问题讨论】:

  • 5) 你说程序遍历数组并继续直到最后一个对象。循环在做什么。当您说它进入(无限循环)或直接到最后时,您希望它做什么?程序是否应该循环遍历数组,根据描述提示用户输入单词?
  • 是的,程序循环遍历数组,在一个框中打印出描述,并有另一个空间供用户猜测单词。然后循环内的另一个条件将用户输入的单词与数组中的单词进行比较并显示一些结果。然而问题是循环不关心内部事件,要么永远循环,要么迭代到最后一个对象并结束。循环结束前用户无法输入内容

标签: javascript arrays events dom


【解决方案1】:

我能想到两个简单的解决方案。

1) 使用prompt 查找检索用户输入(它会停止脚本直到用户回答)

例子:

var questions = [...]; // assuming content objects look like {word:"...", description:"..."}

for(var i in questions){
    var userInput = prompt( questions[i]["description"] ); // prompt() stops the script until user answers

    if(userInput == questions[i]["word"]){  // compare user input with value from object
        // [handle correct guess]
    } else {
        // [handle incorrect guess]
    }
}
// [Game Ended]

2) 如果不想使用提示对话框,而不是循环显示问题,我建议一次只显示一个问题,并将显示选项的索引存储在一个额外的全局变量中。在提交按钮的处理程序中,增加索引并询问下一个问题。

例子:

var questions= [ ... ];
var currentIndex = 0;

function askNextQuestion(){
    if(currentIndex < questions.length){
        var currentQuestion = questions[currentIndex];
        // [Display the question]
    } else {
        // [Game Ended]
    }
}
function start(){      // call this function from Start handler
    currentIndex = 0;  // set question index to 0
    askNextQuestion(); // ask the question
}
function submitPressed(){ // call this function from Submit handler
    // [handle answer]
    currentIndex++;      // go to next question
    askNextQuestion();   // ask the question
}

【讨论】:

  • 第二个是我正在寻找的 :) 我犯了一个错误,将所有事件处理程序放在一个循环中(遍历数组),这导致循环过早结束或永远循环。非常感谢:D
猜你喜欢
  • 2012-05-02
  • 1970-01-01
  • 2021-11-18
  • 2012-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多