2013-11-24 3 views
0

I'am получаю эту ошибку, когда I'am пытается запустить мой код:Не удается прочитать свойство «длина» неопределенной 4

на линии 31: Не удается прочитать свойство «длина» неопределенной

<script type="text/javascript"> 

var winComb = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [1, 4, 7], [2, 5, 8], [3, 6, 9], [1, 5, 9], [3, 5, 7]]; 
var cells = new Array(9); 
var playerName = $_POST['player']; 
var chtr = $_POST['emotion']; 
var uchtr = ""; 

if(chtr=="xChar"){ 
    chtr="x"; 
    uchtr="o"; 
} 
else{ 
    chtr="o"; 
    uchtr="x"; 
} 

function player(id){ 

    win(); 
    insert(id, "p"); 
    computer(); 
} 

function computer(){ 

    var x = 0; 

    for(var i=0;i<=winComb.length;i++){ 

     for(var j=0;j<winComb[i].length;j++){ 

      if(winComb[i][j]==chtr){ 

       x++; 
      } 

      if(x==2){ 

       for(var k=0;k<winComb[i].length;k++) 

        if(winComb[i][j]==""){ 

         insert(winComb[i][j], "c"); 
        } 
      } 
     } 
    } 
} 

function shortWinComb(){ 

    var a = winComb; 

    for(var k=1;k<=cells.length;k++){ 

     if(cells[k]==""){ 

      for(var i=0;i<a.length;i++){ 

       for(var j=0;i<=a[i].length;i++){ 

        if(winComb[i][j]==k){ 

         a = a - a[i]; 
        } 
       } 
      } 
     } 
    } 

    return a; 
} 

function win(){ 

    var x = 0; 

    if(!cells==null) 

    for(var i=0;i<=shortWinComb().length;i++){ 

     for(var j=0;i<=shortWinComb()[i].length;i++){ 

      if(shortWinComb()[i][j]==chtr){ 

       x++; 
      } 

      if(x==3){ 

       for(var k=1;k<=9;k++){ 

        lockCell(k); 
       } 

       alert("*~*~* "+player+" Wins ! *~*~*"); 
      } 

      else if(shortWinComb()[i][j]==uchtr){ 

       x++; 
      } 

      if(x==3){ 

       for(var k=1;k<=9;k++){ 

        lockCell(k); 
       } 

       alert("*~*~* Computer Wins ! *~*~*"); 
      } 
     } 

     x = 0; 
    } 
} 

function insert(id, actor){ 

    var cell = document.getElementById(id); 

    if(cell.innerHTML=="") 
     if(actor=="p") 
      cell.innerHTML = "<img src=images/"+chtr+".png>"; 
     else 
      cell.innerHTML = "<img src=images/"+uchtr+".png>"; 

    for(var i=1; i<=cells.length;i++){ 

     if(id==i){ 
      if(actor=="p") 
       cells[i]==chtr; 
      else 
       cells[i]==uchtr; 
      break; 
     } 
    } 

    lockCell(id); 
} 

function lockCell(id){ 

    var cell = document.getElementById(id); 
    cell.onclick=""; 
    cell.style.cursor=""; 
} 
</script> 
</head> 

так где проблема в моем коде ??? Я новичок в js, и я не слишком много знаю об этих ошибках.

+0

$ _POST не должен проходить между метками php? – chepe263

+0

$ _POST - это переменная, объявленная из другого js-скрипта, который я использовал. – user2996426

ответ

0

Проблема здесь:

i<=winComb.length 

В конце концов, что i будет в конечном итоге winComb.length, так winComb[i] будет неопределенным. Как вы, наверное, знаете, массивы в javascript имеют элементы с индексами между 0 и length-1.

Fix:

i<winComb.length 

PS: ошибка повторяется в нескольких местах. (включая один цикл, в котором вы повторяете от 1 до длины).

PSS: Если вы не имеете дело со старыми браузерами (или может использовать polyfill для отсутствующих функциональных возможностей), вы можете использовать более функциональный способ перебора элементов в массиве:

arr.forEach(function(item, index, array) { 
    /* code inside loop */ 
}); 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

+0

спасибо, я изменил значения i & j и забыл изменить операторы сравнения :( – user2996426

Смежные вопросы