【发布时间】:2012-12-25 04:11:27
【问题描述】:
我正在编写井字游戏,但我用来检查用户是单击空方块还是已填充方块的代码对我不起作用。请找出我的错误。
function startgame(){
var $board=$('#board');
$('div.square').remove();
for(var i=0;i<9;i++)
$board.append($('<div/>').addClass('square').addClass('empty'));
$('div.square.empty').click(function(){
$this=$(this);
if($('div.square.empty').length==0){
displayendmsg();
}
else {
$this.removeClass('empty');
if(currentplayer=="X")
$this.append($('<div><img src="cross.jpg"> </div>').addClass('cross').css('visibility','visible'));
else
$this.append($('<div><img src="circle.jpg"> </div>').addClass('circle').css('visibility','visible'));
flipturn();
}
});
};
即使点击一个已经被占用的方块,我也会进入处理程序,但我不知道为什么。
【问题讨论】:
-
仅供参考,您真的应该使用
var $this = $(this);- 如果没有var关键字,您创建的全局几乎总是不是您想要的,有时(通常是循环变量发生时)一个很好的方法引入难以发现的错误。 -
由于这可能是一个学习项目,我建议您尝试在不更改类或让 jQuery 为您做出任何“决定”的情况下这样做。理想情况下,您有一个独立于视觉表示和界面的游戏引擎,您告诉游戏引擎的只是某个图块已被点击,然后它应该自行决定这是否是合法行为。现在看来这似乎不是一个很大的优势,但对于更复杂的事情,你最终会以现在的方式编写无法维护的代码。
标签: javascript jquery