TicTacToe click()范围错误

时间:2015-11-08 11:04:53

标签: javascript jquery html

我正在尝试用机器人在JavaScript上创建一个TicTacToe游戏。现在最主要的是当点击一个带有“.freeSpot”类的div时,必须将this.class改为另一个class => click函数仅适用于“.freeSpot”类。在这个函数中,我还为机器人添加了一个函数。类似地,机器人将中间方格的类改为“.botMarked”,玩家不应该改变那个中间方格,但确实如此。

$('.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

1 个答案:

答案 0 :(得分:0)

该函数使用.freeSpot类绑定到对象。因此,当稍后删除该类时,绑定仍然存在。

您可以尝试多种选择,

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