我正在为练习制作一个国际象棋应用程序,我有一个名为movePiece
的函数,在用户选择一个方块来移动一个片段后调用它。在我调用它之前,我有一行使用字典获取目标片段的属性(皇后,典当等):
secondAttr = pieceDict[posStr][0];
奇怪的是,当我注释掉这一行时,我的movePiece()
函数被正确调用,但是当我把它留在那里时,在我第三次点击之前没有任何反应。我非常困惑为什么我的函数调用之前的这个随机行与函数本身无关导致了这种行为。
这里有一个jsFiddle: https://jsfiddle.net/eqmbk0u1/ ,这些碎片存放在我的电脑上,所以它们不会出现,但是它们都在正常的起始位置,当你选择它时,它的方形变成蓝色。看看评论第67行与正常情况相比会发生什么。
答案 0 :(得分:0)
您else
事件中的$('square').click()
阻止似乎有错误。
} 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;
}
首次点击正方形时,会将作品名称保存到posStr
。然后,在第二次点击时,您会使用undefined
值覆盖该值,因为positions[destRow][destCol]
中没有任何内容。如果您交换第66和67行,代码将起作用,因为您在覆盖secondAttr
之前设置了posStr
。