2014-09-13 112 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