【问题标题】:Ignore user input after certain point在特定点之后忽略用户输入
【发布时间】:2016-12-15 22:21:55
【问题描述】:

在宣布获胜者后,我有没有办法在我的井字游戏板上杀死/中断用户输入?在发送谁获胜的警报后,我尝试在 isFull() 函数中使用 break,但它仍然会接受用户在表格后记中的输入。

这里有一个链接可以告诉你它正在运行: https://jsfiddle.net/n1kn1vLh/2/

function TicTacToe() {
  this.board = [
    [0, 0, 0],
    [0, 0, 0],
    [0, 0, 0]
  ];
  this.showhtml = toHTML;
  this.player2 = "O";
  this.player1 = "X";
  this.turn = "";
}

function toHTML() {
  var player = '';
  var displayplayer = document.getElementById("displayMessage");
  var htmlStr = '';
  var gametable = document.getElementById("tictable");
  var cell = '';
  for (var i = 0; i < this.board.length; i++) {
    htmlStr += '<tr>';
    for (var j = 0; j < this.board[i].length; j++) {
      if (this.board[i][j] == 0) {
        this.board[i][j] = cell;
        htmlStr += ("<td data-i=\"" + i + "\" data-j=\"" + j + "\">" +     this.board[i][j] + "</td>");
      } 
      gametable.addEventListener("click", clickHandler, false);
    }
    htmlStr += '</tr>';
  }
  gametable.innerHTML = htmlStr;
  if (this.turn == this.player1 || this.turn == "") {
    player += ("<p>It is " + this.player1 + "'s turn.</p>");
    displayplayer.innerHTML = player;
    return this.turn = "X";
  }   else {
    player += ("<p>It is " + this.player2 + "'s turn.</p>");
    displayplayer.innerHTML = player;
    return this.turn = "O";

  }

  function clickHandler(event)
  {
    if (tic.turn == tic.player1) {
      if (event.target.innerHTML == ''){ 
        event.target.innerHTML = tic.turn;
        tic.board[event.target.dataset.i][event.target.dataset.j] = tic.turn;
        tic.turn = tic.player2;
        document.getElementById("displayMessage").innerHTML = "<p>It is " +   tic.turn + "'s turn.</p>";
        isFull();
        return tic.turn;
      } else {
        alert('Invalid Move! Try again.');
      }
    } else {
      if (event.target.innerHTML == '') {
        event.target.innerHTML = tic.turn;
        tic.board[event.target.dataset.i][event.target.dataset.j] = tic.turn;
        tic.turn = tic.player1;
        document.getElementById("displayMessage").innerHTML = "<p>It is " + tic.turn + "'s turn.</p>";
        isFull();
        return tic.turn;
      } else {
        alert('Invalid Move! Try again.');
      }
    }

  }

  function isFull() {
    for (var i = 0; i < tic.board.length; i++) {

      if(tic.board[i][0] == tic.board[i][1] && tic.board[i][0]==tic.board[i][2] && tic.board[i][0]!=0){
        alert(tic.board[i][0]+" Wins");
        return;
      }
    }
    for (var i = 0; i < tic.board.length; i++) {

      if(tic.board[0][i] == tic.board[1][i] && tic.board[0][i]==tic.board[2][i]  && tic.board[0][i]!=0){
        alert(tic.board[0][i]+" Wins");
        return;
      }
    }

    if(tic.board[0][0]==tic.board[1][1] && tic.board[0][0] == tic.board[2][2]  && tic.board[0][0]!=0){
      alert(tic.board[0][0]+" Wins");
      return;
    }

    if(tic.board[0][2]==tic.board[1][1] && tic.board[0][2] == tic.board[2][0]  && tic.board[2][0]!=0){
      alert(tic.board[1][1]+" Wins");
      return;
    }

  }
}


tic = new TicTacToe();
tic.showhtml();

【问题讨论】:

    标签: javascript


    【解决方案1】:

    当有人获胜时,您可以移除 eventListener:

    function isFull() {
        for (var i = 0; i < tic.board.length; i++) {
          if(tic.board[i][0] == tic.board[i][1] && tic.board[i][0]==tic.board[i][2] && tic.board[i][0]!=0){
            alert(tic.board[i][0]+" Wins");
            document.getElementById("tictable").removeEventListener('click', clickHandler);
            return;
          }
      }
    
      for (var i = 0; i < tic.board.length; i++) {
          if(tic.board[0][i] == tic.board[1][i] && tic.board[0][i]==tic.board[2][i]  && tic.board[0][i]!=0){
            alert(tic.board[0][i]+" Wins");
            document.getElementById("tictable").removeEventListener('click', clickHandler);
            return;
          }
      }
    
      if(tic.board[0][0]==tic.board[1][1] && tic.board[0][0] == tic.board[2][2]  && tic.board[0][0]!=0){
        alert(tic.board[0][0]+" Wins");
        document.getElementById("tictable").removeEventListener('click', clickHandler);
        return;
      }
    
      if(tic.board[0][2]==tic.board[1][1] && tic.board[0][2] == tic.board[2][0]  && tic.board[2][0]!=0){
        alert(tic.board[1][1]+" Wins");
        document.getElementById("tictable").removeEventListener('click', clickHandler);
        return;
      }
    }
    

    【讨论】:

    • 哇,谢谢就像一个魅力。我觉得我应该从一开始就意识到这一点。
    【解决方案2】:

    在你的 isFull() 中添加以下内容

    document.getElementById('user input').disabled = true;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 2011-06-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多