Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 导致程序行为异常的赋值_Javascript_Jquery_Chess - Fatal编程技术网

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语句中的第二个属性,因为我需要知道目标方块是否被占用。