Javascript-通过这个循环

时间:2015-10-20 06:01:15

标签: javascript for-loop indexof

我正在制作一个Hangman游戏。我正在使用indexOf()函数来检查字母是否在单词中。每个字母都有一个按钮,单击该按钮时会发生以下情况(此功能用于字母A):

function A(event) {

  if (event.target.classList.contains("disabled")) {
    event.preventDefault();
  }

  document.getElementById("A").style.opacity = "0.5";
  event.target.classList.add("disabled");
  score = score + 1;
  document.getElementById("Score").innerHTML = score;

  for (var letter = 0; letter <= randomWord.length; letter++) {
    if (randomWord[letter].indexOf("a") !== -1) {
      document.getElementById("letter_" + letter).innerHTML = "A";
    } else {
      mistakesLeft = mistakesLeft - 1;
      document.getElementById("attempsLeft").innerHTML = mistakesLeft;
      console.log(mistakesLeft);

      if (mistakesLeft == 7) {
        document.getElementById("part-1").style.display = "block";
      } else if (mistakesLeft == 6) {
        document.getElementById("part-2").style.display = "block";
      } else if (mistakesLeft == 5) {
        document.getElementById("part-3").style.display = "block";
      } else if (mistakesLeft == 4) {
        document.getElementById("part-4").style.display = "block";
      } else if (mistakesLeft == 3) {
        document.getElementById("part-5").style.display = "block";
      } else if (mistakesLeft == 2) {
        document.getElementById("part-6").style.display = "block";
      } else if (mistakesLeft == 1) {
        document.getElementById("part-7").style.display = "block";
      } else {
        document.getElementById("part-8").style.display = "block";
      }
    }
    break;
  }
}

出于某种原因,当我的随机单词中包含“A”并且它不是第一个字母时它不会打印到document.getElementById("letter_" + letter).innerHTML = "A";中,而是继续进入else语句并认为没有这个词中的“A”。如果“A”是单词的第一个字母,它就会完成它的意图。我注意到问题可能是代码底部的中断(由于中断而无法到达下一个字母) - 我如何修复它以便循环继续经过第一个循环,直到它达到这个词没有减去错误的任何部分左派?

2 个答案:

答案 0 :(得分:1)

应该是

for (var letter = 0; letter <= randomWord.length - 1; letter++) {
    if (randomWord[letter] === 'a') {
      ...

您无需翻阅单词并同时使用indexOf。函数indexOf为您搜索一封信。另请注意randomWord.length - 1

在这个问题的范围之外,我认为你不需要为所有字母都有一个单独的功能。创建一个通用函数,并在每次按钮单击时调用它,同时将相应的字母作为参数传递给它。

答案 1 :(得分:0)

而不是必须改变所有处理程序的逻辑,这是一个有点整理的版本

function letterClicked(event) {
  var elem = event.target,
      ch = elem.id,
      reg = new RegEx(ch),
      found = false;

  if (elem.classList.contains("disabled")) {
    return false; //you want to return early in this case
  }

  elem.style.opacity = "0.5";
  elem.classList.add("disabled");
  score = score + 1;
  document.getElementById("Score").innerHTML = score;

  if(!(match = reg.exec(randomWord)) {
     mistakes++;
     document.getElementById("part-" + mistakes).style.display = "block";
  } else {
    do {
      document.getElementById("letter_" + match.index).innerHTML = ch;
    }while (match = reg.exec(randomWord));
  }
}