【问题标题】:TicTacToe click() scope errorTicTacToe click() 范围错误
【发布时间】:2015-11-08 11:04:52
【问题描述】:

我正在尝试使用机器人在 JavaScript 上创建井字游戏。现在的主要事情是,当单击具有类“.freeSpot”的 div 时,必须将 this.class 更改为不同的 class=> 单击功能仅适用于“.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

【问题讨论】:

    标签: javascript jquery html


    【解决方案1】:

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

    您可以尝试多种选择,

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-27
      • 2016-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-03
      相关资源
      最近更新 更多