javascript - 单击后禁用 div 并重新启用它

标签 javascript jquery html css

所以我正在尝试创建一个 JavaScript Tic-Tac-Toe 作为 FCC 前端元素的一部分,但我在 2 个特定领域遇到了问题。

  1. 在选择 O 或 X 之前禁止 div 可点击。 (如果没有这个功能,点击仍然会被记录下来,并且它说玩家赢了只是空白框。

  2. 禁止 div 在被标记后被重新点击,并在游戏结束或按下重置按钮后能够重置它。

我尝试了不同的方法来实现这一目标,但收效甚微。

这是我的代码:

编辑:我对代码进行了一些修改以解决第一个问题。 但是我在第二部分仍然遇到问题。单击后我仍然可以单击框,这会更改框上的标记并弄乱绘制条件。

$(document).ready(function() {
  var user;
  var ai;
  var aiOwn = [];
  var userOwn = [];
  var currentTurn;
  var moves = 0;

  var handler = function() {
    if (user === '') {
      moves = 0;
    }
    else {
      $(this).text(currentTurn);
      moves = moves + 1;
      checkWin();
      draw();
      next();
    };
  };

  function clearBoard() {
    document.getElementById("o").disabled = false;
    document.getElementById("x").disabled = false;
    $('.box').text(' ');
    moves = 0;
    user = '';
    ai = '';
  };

  function draw() {
    if (moves >= 9) {
      alert("Draw!");
      clearBoard();
    };
  };

  function checkWin() {
    switch (true) {
      case $('#1').text() === currentTurn && $('#2').text() === currentTurn &&
      $('#3').text() === currentTurn:
        alertWin();
        break;
      case $('#4').text() === currentTurn && $('#5').text() === currentTurn &&
      $('#6').text() === currentTurn:
        alertWin();
        break;
      case $('#7').text() === currentTurn && $('#8').text() === currentTurn &&
      $('#9').text() === currentTurn:
        alertWin();
        break;
      case $('#1').text() === currentTurn && $('#4').text() === currentTurn &&
      $('#7').text() === currentTurn:
        alertWin();
        break;
      case $('#2').text() === currentTurn && $('#5').text() === currentTurn &&
      $('#8').text() === currentTurn:
        alertWin();
        break;
      case $('#3').text() === currentTurn && $('#6').text() === currentTurn &&
      $('#9').text() === currentTurn:
        alertWin();
        break;
      case $('#1').text() === currentTurn && $('#4').text() === currentTurn &&
      $('#9').text() === currentTurn:
        alertWin();
        break;
      case $('#3').text() === currentTurn && $('#5').text() === currentTurn &&
      $('#7').text() === currentTurn:
        alertWin();
        break;
      default:
    }
  };

  function alertWin() {
    if (currentTurn == user) {
      alert('Player 1 Win!');
      clearBoard();
    } else {
      alert('Player 2 Wins!');
      clearBoard();
    }
  };

  $('#o').click(function() {
    document.getElementById("o").disabled = true;
    document.getElementById("x").disabled = true;
    user = 'o';
    currentTurn = 'o';
    ai = 'x';
  });

  $('#x').click(function() {
    document.getElementById("o").disabled = true;
    document.getElementById("x").disabled = true;
    user = 'x';
    currentTurn = 'x';
    ai = 'o';
  });

  function next() {
    if (currentTurn == user) {
      currentTurn = ai;
    } else {
      currentTurn = user;
    }
  };

  $('#reset').on('click', clearBoard);

  $('.box').on('click', handler);
});
body {
  background-color: #3AB567;
  height: 100%;
  width: 100%;
}
* {
  color: #333;
  text-align: center;
}

h1{
  text-align: center;
  color: white;
}

button{
  text-align: center;
  width: 60px;
  height: 40px;
  color: black;
  margin: 10px;
}
.board {
  width: 600px;
  height: 600px;
  background-color:#FFD2AD;
  margin: auto;
  margin-top: 20px;
  margin-bottom: 40px;
  position:relative;
  top: 0; left: 0; right: 0; bottom: 0;
  padding: 5px;
  border-radius: 10px;
  border-style: solid;
  border-color: #BFAC82;
}
.box{
  width: 194px;
  height: 194px;
  border:1px solid;
  border-color: white;
  float: left;
  background-color: #FFD2AD;
  font-size:100px;
}
div.box:hover {
      background-color: darken(#FFD2AD, 5);
    }

div{
  text-align: center;
  color: white;
  padding: 10px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div container = 'container-fluid center'>
  <h1> Tic Tac Toe </h1>
  <button id = 'o' class ='btn'> O </button>
  <button id = 'x' class ='btn'> X </button>
  <button id= 'reset' class = 'btn'>RESET</button>
  <div class = 'board'>
   <div id = '1' class="box no-element"></div>
   <div id = '2' class="box no-element"></div>
   <div id = '3' class="box no-element"></div>
   <div id = '4' class="box no-element"></div>
   <div id = '5' class="box no-element"></div>
   <div id = '6' class="box no-element"></div>
   <div id = '7' class="box no-element"></div>
   <div id = '8' class="box no-element"></div>
   <div id = '9' class="box no-element"></div>
 </div>
</div>

最佳答案

对于第二部分,您可以像下面这样放入 CSS:

.myDiv
{
    pointer-events:none; 
}

这将禁止在 div 内单击

然后您可以禁用它或使用 javascript 启用它,例如:

document.styleSheets[0].cssRules[0].style.removeProperty("pointer-events");

关于javascript - 单击后禁用 div 并重新启用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37463617/

相关文章:

html - 通过 HTML 和 CSS 使表格自动垂直滚动

javascript - 使用 jquery 和 html 表单显示范围值

javascript - Angular 2+ 加载整个模块还是只加载导出的组件?

get - 在 JScript 中,是否可以实现从外部看起来像对象属性的 getter 和 setter?

javascript - 使用ajax将php数组传递给javascript

html - 使用 CSS 显示两列,一列具有固定宽度,另一列占用剩余空间

python - 在抓取一个元素的不同位置时如何压缩脚本

javascript - 使用 Object.keys 从 JavaScript 中的 JSON 文件中的值获取多维数组

javascript - jQuery '#' + 数据 ("target") 模式

javascript - 无法定位选择器(或其他东西)