Javascript 导致程序行为异常的赋值
我正在制作一个用于练习的国际象棋应用程序,我有一个名为Javascript 导致程序行为异常的赋值,javascript,jquery,chess,Javascript,Jquery,Chess,我正在制作一个用于练习的国际象棋应用程序,我有一个名为movePiece的函数,当用户选择一个方块将棋子移动到该方块后,就会调用该函数。在我调用它之前,我有一行代码,它使用字典获取目标工件的属性(皇后、典当等): secondAttr = pieceDict[posStr][0]; 奇怪的是,当我注释掉这一行时,我的movePiece()函数被正确调用,但当我将其保留在该行时,直到第三次单击时才发生任何事情。我非常困惑,为什么我的函数调用之前的随机行与函数本身无关,导致了这种行为 下面是一个
movePiece
的函数,当用户选择一个方块将棋子移动到该方块后,就会调用该函数。在我调用它之前,我有一行代码,它使用字典获取目标工件的属性(皇后、典当等):
secondAttr = pieceDict[posStr][0];
奇怪的是,当我注释掉这一行时,我的movePiece()
函数被正确调用,但当我将其保留在该行时,直到第三次单击时才发生任何事情。我非常困惑,为什么我的函数调用之前的随机行与函数本身无关,导致了这种行为
下面是一个JSFIDLE:
,png的片段存储在我的计算机上,因此它们不会显示,但它们都在正常的起始点,当您选择一个时,它的方形变为蓝色。查看当您注释掉第67行时发生的情况,与正常情况相比。您的
块中似乎有一个错误,$('square')。单击()
} else {
$("#"+firstID).removeClass('selected');
$("#"+firstID).addClass(lastSqrColor);
destRow = parseInt($(this).attr('row'));
destCol = parseInt($(this).attr('col'));
destID = parseInt($(this).attr('id'));
secondAttr = pieceDict[posStr][0]; //<--- Swap
posStr = positions[destRow][destCol]; //<--- Swap
movePiece();
firstTouch = false;
}
}其他{
$(“#”+firstID).removeClass('selected');
$(“#”+firstID).addClass(lastSqrColor);
destRow=parseInt($(this.attr('row'));
destCol=parseInt($(this.attr('col'));
destID=parseInt($(this.attr('id'));
secondAttr=pieceDict[posStr][0];//什么浏览器?我看不出使用Chrome有什么区别?没有PNG,很难看到它,因为我们看到蓝色的方块,无论哪种方式都消失了。@csharpfolk在fiddle中找到了使用Chrome的原因:TypeError:无法读取未定义的
的pieceDict
的属性“0”不完整。这只发生在t不在该词典中?当我突出显示一个片段并尝试移动它时,警报(“移动片段”)不会显示,直到我单击另一个片段。谢谢它,我想我需要在词典中为“N”添加一个值这就是我在嵌套数组中所做的,在正方形中没有碎片时跟踪位置。或者简单地保存第一次单击的行和列,然后在第二次单击时使用它。我不确定你到底在说什么。我正在制作canMove()函数,该函数将具有片段的逻辑,以确保其可以移动,为此,我需要知道目标方块上的片段。在第66行中,您将获得position[destRow][destCol]的值
。destRow
和destCol
的值是当前单击的方块的行和列,该方块是工件应移动的目标方块。但是,工件尚未移动是,因此位置[destRow][destCol]
返回未定义的
。如果要使用第一行
和第一列
而不是destRow
和destCol
,则它将查找正确的位置,并获取您尝试移动的块。我已经在第53-54行的If语句中获取了我尝试移动的块。我需要获取else语句中的第二个属性,因为我需要知道目标方块是否被占用。