간단한 tic-tac-toe 게임을 만들고 코드에서 많은 기능을 트리거하는 이벤트 핸들러가 있습니다. 문제는 게임이 끝나면 게임이 끝나고 사용자가 게임과 상호 작용할 수 없도록 해당 이벤트 처리기를 비활성화하려는 것입니다. 나는 그것을 들여다 보았습니다. 바인드 해제/바인드, on/off/prop/attr nulling은 작동하지 않습니다. 조건이 충족 될 때이 이벤트 처리기를 비활성화하는 다른 방법이 있습니까? .one ('클릭') 핸들러를 시작하는 상위 처리기가 아닌 비활성화하고 싶습니다.jQuery에서 이벤트 처리기 비활성화
//Creates the variables needed to be manipulated later
$(document).ready(function() {
var X = 'X';
var O = 'O';
var currentPlayer;
var turnCount = 0;
var xMoves = [];
var oMoves = [];
var cellTracker;
var winAlert;
var winConditions = [
['c1', 'c2', 'c3'],
['c4', 'c5', 'c6'],
['c7', 'c8', 'c9'],
['c1', 'c4', 'c7'],
['c2', 'c5', 'c8'],
['c3', 'c6', 'c9'],
['c1', 'c5', 'c9'],
['c3', 'c5', 'c7']
];
/*Set's the current player to X if turnCount is odd
And to O if turnCount is even*/
var setCurrentPlayer = function() {
if (turnCount % 2 === 0) {
currentPlayer = O;
} else {
currentPlayer = X;
}
};
//Pushes cellTracker's value to the curent player's move variable
var storeMoves = function() {
if (currentPlayer === X) {
xMoves.push(cellTracker);
} else if (currentPlayer === O) {
oMoves.push(cellTracker);
}
};
//Compares players moves with the winConditions to determine a winner
var determineWin = function (pMoves) {
for (var i = 0; i < winConditions.length; i++) {
if (winConditions[i].length > pMoves.length) {
continue;
}
for (var j = 0; j < winConditions[i].length; j++) {
winAlert = false;
for (var k = 0; k < pMoves.length; k++) {
if (pMoves[k] === winConditions[i][j]) {
winAlert = true;
break;
}
}
if (!winAlert) break;
}
if (winAlert) {
alert(currentPlayer + " wins!");
break;
}
}
};
/*Place's an X or an O when a cell is clicked depending
on the current player, and updates the turnCount*/
$('td').one('click', function() {
turnCount += 1;
setCurrentPlayer();
$(this).text(currentPlayer);
cellTracker = $(this).attr('id');
storeMoves();
determineWin(currentPlayer == 'X' ? xMoves : oMoves);
if (turnCount === 9 && winAlert === false) {
alert("Tie game!");
}
console.log(turnCount, xMoves, oMoves, winAlert);
});
});
그들은 어떻게 '작동하지'합니까? –
@DavidThomas 사용자는 여전히 요소를 클릭 할 수 있으며 코드는 여전히 실행됩니다. – user2449973
"Inspect Element"[Chrome 및 Firefox 내부 도구] 또는 FIREBUG을 사용하여 오류를 분석해야합니다. –