2015-11-08 83 views
0

我正在尝试用bot创建一个TicTacToe游戏。现在最主要的是,当点击带有“.freeSpot”类的div时,必须将该类改为不同的类=> click函数仅对“.freeSpot”类起作用。在这个功能中,我还为机器人添加了一个功能。类似地,机器人将中间广场的班级更改为“.botMarked”,玩家不应该能够更改该中间广场,但它确实如此。TicTacToe单击()范围错误

$('.freeSpot').click(function() { 
     console.log(this); 
     $(this).attr('class', "marked"); 
     $(this).html("X"); 
     winBool = checkWin(); 
     if (winBool == true) { 
      alert("Player wins"); 
     } 
     botTurn(); 
    }); 

    //TODO- finish for every turn 
    function botTurn() { 
     var Q = $('#Q').text(); 
     var W = $('#W').text(); 
     var E = $('#E').text(); 
     var A = $('#A').text(); 
     var S = $('#S').text(); 
     var D = $('#D').text(); 
     var Z = $('#Z').text(); 
     var X = $('#X').text(); 
     var C = $('#C').text(); 
     if (S != "X") { 
      $("#S").attr("class", 'botMarked'); 
      $("#S").html("O"); 
     } 

我还注意到,如果我在.click函数外调用botTurn()函数,程序工作正常,我该怎么办?

完整的项目:https://github.com/martin-varbanov96/TicTacToe/tree/master/TicTacToe%20jQuery/ticTacTIe/TicTacToe/TicTacToe

回答

0

功能势必与.freeSpot类的对象。所以当后来班级被删除时,绑定仍然存在。

你可以尝试多种选择,

  1. 检查对象仍然有.freeSpot你执行你的代码之前。
  2. 绑定到元素的父元素。这样只有.freeSpot类的孩子才会触发事件。 JQuery Delegate