2016-01-21 31 views
0

我正在爲練習製作一個象棋應用程序,並且我有一個叫做movePiece的函數,在用戶選擇一個正方形移動棋子後被調用。之前,我把它叫做我有一條線,得到了對方地址的屬性(女王,典當等。)使用字典:導致程序行爲異常的作業

secondAttr = pieceDict[posStr][0]; 

奇怪的是,當我註釋掉這一行我movePiece()函數被調用是否正確,但當我第三次點擊它時,沒有任何反應。我非常困惑,爲什麼這個在函數調用之前的這個隨機行與函數本身沒有任何關係導致了這種行爲。

這裏有一個的jsfiddle: https://jsfiddle.net/eqmbk0u1/ ,棋子PNG的存儲在我的電腦上,使他們不會顯示出來,但他們都在他們的正常啓動點,當你選擇一個它的廣場變成藍色。看看會發生什麼,當你註釋掉第67行 vs它通常。

+1

什麼瀏覽器?使用Chrome瀏覽器沒有什麼不同? – Nikki9696

+0

如果沒有png,很難看到它,因爲我們看到了藍色方塊,它消失了。 @csharpfolk找到原因恕我直言 – Gavriel

+3

鉻,在小提琴:'TypeError:無法讀取屬性'0'未定義' – csharpfolk

回答

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,代碼將起作用,因爲您在覆蓋posStr之前設置了secondAttr

+0

感謝ItsGreg,我想我需要在我的字典中爲「N」添加一個值,這就是我在嵌套數組中保留跟蹤位置時所在的方塊中沒有棋子的值。 – MarksCode

+0

或者只保存第一次點擊的行和列,然後在第二次點擊時使用它。 – ItsGreg

+0

我不確定你在說什麼。我正在製作一個canMove()函數,該函數將具有這些部分的邏輯來確保它可以移動,並且爲此我需要知道目標方塊上有什麼部分。 – MarksCode