2014-09-13 100 views
1

我試圖做一個簡單的愚蠢井字遊戲使用HTML,CSS和Javascript。JavaScript Typerror變量未定義。

在下面的播放器移動函數中,由於JSON對象中的Typeerror,無法調用ComputerMove函數。

function Mymove(idValue) 
{ 
var flag=0; 
var image = document.getElementById(idValue); 
if (image.src.match("blank.png")) { 
image.src = "X.png"; 
flag=Check(); 
if (flag==1) 
    { 
    alert("You Won"); 
    reset(); 
    return; 
    }; 
ComputerMove(); 
}; 
} 
function Check(){ 
    for (var i =0 ; i <= 8;i++) { 
    var image=document.getElementById(winList[i].a); 
    if (!image.src.match("blank.png")) { 
    if(image.src==document.getElementById(winList[i].b).src && image.src==document.getElementById(winList[i].c).src) 
    return 1; 
} 
} 

這裏是JSON對象下: -

var winList =[ 
    {a:1,b:2,c:3}, 
    {a:4,b:5,c:6}, 
    {a:7,b:8,c:9}, 
    {a:1,b:4,c:7}, 
    {a:2,b:5,c:8}, 
    {a:3,b:6,c:9}, 
    {a:1,b:5,c:9}, 
    {a:3,b:5,c:7}]; 

校驗功能工作始終,並在控制檯響應,

TypeError: winList[i] is undefined 

在調試時我這個錯誤ComputerMove後發現( )函數永遠不會被調用。 所以請幫助。

+0

如果'flag'是'1',了'ComputeMove()'沒有得到執行。這很好嗎? – 2014-09-13 12:34:59

回答

1

winList你陣列具有8的長度,具有索引從0跨越 - 7.

你的環for (var i =0 ; i <= 8;i++)嘗試訪問winList[8](當i == 8),這是undefined - 從而崩潰腳本時你嘗試訪問undefinedwinList[i].a)的a

試着改變你的循環條件如下:for (var i = 0 ; i < 8; i++)

+0

是的,它解決了我的問題。謝謝。 – zion 2014-09-13 12:43:11

+0

@zion,很好 - 把它當作答案:) – JAM 2014-09-13 12:44:24

+0

它需要3分鐘..我會盡快做到這一點。 :) – zion 2014-09-13 12:45:17