Javascript jQuery empty()方法使我的<;元素>;不可点击?
我正在尝试使用HTML/CSS/Javascript/jquery创建一个tic-tac-toe游戏。我有一个重置按钮,可以清除网格中的内容。按下重置按钮后,网格的内容将被清除,但我无法单击网格再次选择我的位置。我的重置按钮具有以下代码:Javascript jQuery empty()方法使我的<;元素>;不可点击?,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我正在尝试使用HTML/CSS/Javascript/jquery创建一个tic-tac-toe游戏。我有一个重置按钮,可以清除网格中的内容。按下重置按钮后,网格的内容将被清除,但我无法单击网格再次选择我的位置。我的重置按钮具有以下代码: $('#reset').click(function(){ $('.cells').empty(); //board_make(); }); 我的网格/板是使用下面的代码创建的。基本上,它为网格中的每个单元创建元素,每个单元都有一类“单元
$('#reset').click(function(){
$('.cells').empty();
//board_make();
});
我的网格/板是使用下面的代码创建的。基本上,它为网格中的每个单元创建元素,每个单元都有一类“单元”
功能板_make(){
对于(变量i=0;i<3;i++){
数组[i]=新数组(3);
对于(var j=0;j<3;j++){
数组[i][j]=“A”;
如果(j==2){
$('.board').append(“”+i.toString()+j.toString()+””;
}
否则{
$('.board').append(“
”+i.toString()+j.toString()+”);
}
}
}
}
最后,这是每当单击网格中的单元格时执行的代码:
$('.cells').click(function(){
if ($(this).text() != symbol){
var a = parseInt($(this).text()[0],10);
var b = parseInt($(this).text()[1],10);
array[a][b] = symbol;
$(this).html("<p class='shown'>"+symbol+"</p>");
}
else{
alert("Spot taken. Pick another spot.");
}
if ((winner_found === false) && (hor_match() || ver_match() || diag_match())){
alert("Match found!");
winner_found = true;
}
});
$('.cells')。单击(函数(){
if($(this).text()!=符号){
var a=parseInt($(this).text()[0],10);
var b=parseInt($(this).text()[1],10);
数组[a][b]=符号;
$(this.html(“”+symbol+“
”);
}
否则{
警惕(“现场拍摄。选择另一个现场”);
}
如果((winner_found==false)和&(hor_match()| | ver_match()| | diag_match()){
警报(“找到匹配项!”);
winner_found=真;
}
});
下面是正在进行的工作的链接以及代码:。编辑-下面的内容不是问题所在。问题似乎是,当清除单元格时,您正在清除隐藏在其中的索引值。也就是说,您正在删除隐藏的
标记
使用jQuery.data()
机制,而不是将索引粘贴在其中:
var cell = ${'<div/>', {'class': 'cells'});
cell.data('x-index', i).data('y-index', j);
$('.board').append(cell);
按如下方式设置事件处理程序:
$('body').on('click', '.cells', function() { ...
清空容器时,所有元素都将丢失,事件处理程序也随之丢失。通过在没有被核化的外部元素上设置处理程序,处理程序在网格重建后仍然有效
如果愿意,还可以将事件处理程序放在“.board”容器上:
$('.board').on('click', '.cells', function() { ...
编辑-下面的内容不是问题所在。问题似乎是,当清除单元格时,您正在清除隐藏在其中的索引值。也就是说,您正在删除隐藏的
标记
使用jQuery.data()
机制,而不是将索引粘贴在其中:
var cell = ${'<div/>', {'class': 'cells'});
cell.data('x-index', i).data('y-index', j);
$('.board').append(cell);
按如下方式设置事件处理程序:
$('body').on('click', '.cells', function() { ...
清空容器时,所有元素都将丢失,事件处理程序也随之丢失。通过在没有被核化的外部元素上设置处理程序,处理程序在网格重建后仍然有效
如果愿意,还可以将事件处理程序放在“.board”容器上:
$('.board').on('click', '.cells', function() { ...
问题是,您使用隐藏文本来指示单元格的行/列,但在清空单元格时删除了隐藏文本
"<div class='cells'><p class='hidden'>"+i.toString()+j.toString()+"</div>"
var a = parseInt($(this).text()[0],10); // $(this).text() is "" after you clear the cells.
var b = parseInt($(this).text()[1],10);
“”+i.toString()+j.toString()
var a=parseInt($(this).text()[0],10);//$清除单元格后,.text()将变为“”。
var b=parseInt($(this).text()[1],10);
有关代码的固定版本,请参见此处:问题在于您使用隐藏文本来指示单元格的行/列,但在清空单元格时删除了隐藏文本
"<div class='cells'><p class='hidden'>"+i.toString()+j.toString()+"</div>"
var a = parseInt($(this).text()[0],10); // $(this).text() is "" after you clear the cells.
var b = parseInt($(this).text()[1],10);
“”+i.toString()+j.toString()
var a=parseInt($(this).text()[0],10);//$清除单元格后,.text()将变为“”。
var b=parseInt($(this).text()[1],10);
有关代码的固定版本,请参见此处:
$('.cells')。单击(函数()
到
$('.board')。在('click','.cells',function')上(
使单击事件在重新渲染时处于活动状态$('.cells').empty();
更改为$('.board').empty();
并重新渲染该板:
董事会(make()$('.cells')。单击(函数()
到
$('.board')。在('click','.cells',function')上(
使单击事件在重新渲染时处于活动状态$('.cells').empty();
更改为$('.board').empty();
并重新渲染该板:
董事会(make()这里有很多问题或潜在问题
- 首先,不要预先定义数组的维度,使用数组文本而不是
newarray
- 接下来,使用DOM!在所有内容上编写HTML只会让事件处理程序丢失
- 使用数据而不是解析节点的文本内容。或者只使用数组
- 重置时,您实际上没有清除阵列。这可能是因为
再次添加了所有内容;我不知道。最好实际删除整个内容,并使用board\u make()
重做一遍。也可以在其中添加事件处理程序,并保持一切良好和完整board\u make()
不是有效的HTML
所以,考虑到这一点,我和现在的情况其实不一样……:(但你明白了,对吧?这里有很多问题或潜在的问题
- 首先,不要预先定义数组的维度,使用数组文本而不是
newarray
- 接下来,使用DOM!在所有内容上编写HTML只会让事件处理程序丢失
- 使用数据而不是解析节点的文本内容。或者只使用数组
- 重置时您实际上没有清除阵列。这可能是因为
再次添加了所有内容;我不知道。最好实际删除整个内容,并使用board\u make()