2016-07-30 1 views
4
<!DOCTYPE html> 
<html> 
<head> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script> 
<meta charset="ISO-8859-1"> 
<title>Insert title here</title> 
<style> 
td 
{ 
    min-height: 50px; 
    min-width: 50px; 
} 
</style> 
</head> 
<body> 
<table border="1" id="tab"> 
<tr> 
    <td class="game"></td> 
    <td class="game"></td> 
    <td class="game"></td> 
    <td class="game"></td> 
</tr> 
<tr> 
    <td class="game"></td> 
    <td class="game"></td> 
    <td class="game"></td> 
    <td class="game"></td> 
</tr> 
<tr> 
    <td class="game"></td> 
    <td class="game"></td> 
    <td class="game"></td> 
    <td class="game"></td> 
</tr> 
<tr> 
    <td class="game"></td> 
    <td class="game"></td> 
    <td class="game"></td> 
    <td class="game"></td> 
</tr> 
</table> 
<script> 
    var tab=[4]; 
    $(document).ready(function() 
    { 
     var i,j; 
     for(i=0;i<4;i++) 
     { 
      tab[i]=[4]; 
      for(j=0;j<4;j++) 
      { 
       tab[i][j]=null; 
      } 
     } 
     randomnum(); 
    }); 
    function randomnum() 
    { 
     var num=Math.random(); 
     alert("called random num"); 
     if(num<0.5) 
      num=2; 
     else 
      num=4; 
     alert(num); 
     var row=Math.floor(Math.random()*10); 
     row=row%4; 
     var col=Math.floor(Math.random()*10); 
     col=col%4; 
     while(tab[row][col]!=null) 
     { 
      var row=Math.random(); 
      row=(row*10)%4; 
      var col=math.random(); 
      col=(col*10)%4; 
      alert("random row col"+row+" "+col); 
     } 
     //alert("row:"+row+"col"+col); 
     tab[row][col]=num; 
     $("#tab tr:eq("+row+") td:eq("+col+")").text(num); 
     keycheck(); 
    } 
    function keycheck() 
    { 
     $(document).on("keydown",function(event){ 
      if(event.which==38) 
       moveup(); 
      else if(event.which==40) 
       movedown(); 
      else if(event.which==39) 
       moveright(); 
      else if(event.which==37) 
       moveleft(); 
      }); 
     } 
    function moveup() 
    { 
     var row,col,j; 
     for(col=0;col<4;col++) 
     { 
      for(row=0;row<3;row++) 
      { 
       if(tab[row][col]==tab[row+1][col]) 
       { 
        tab[row][col]=tab[row][col]*2; 
        row++; 
        tab[row][col]=null; 
       } 
      } 
      for(row=0;row<3;row++) 
      { 
       for(j=row+1;j<4;j++) 
       { 
        if (typeof j === "undefined") { 
         alert("j is undefined"); 
        } 
        if (typeof row === "undefined") { 
         alert("col is undefined"); 
        } 
        if (typeof col === "undefined") { 
         alert("col is undefined"); 
        } 
        alert(j+" "+row+" "+col); 
        if(tab[j][col]==null&&tab[j+1][col]!=null) 
        { 
         tab[j][col]=tab[j+1][col]; 
         tab[j+1][col]=null; 
         j++; 
        } 
       } 
      } 
     } 
     chntable(); 
    } 
    function chntable() 
    { 
     var row,col; 
     for(row=0;row<4;row++) 
     { 
      for(col=0;col<4;col++) 
      { 
       $("#tab tr:eq("+row+") td:eq("+col+")").text(num); 
      } 
     } 
     randomnum(); 
    } 
</script> 
</body> 
</html> 

в приведенном выше коде я получаюНе удается прочитать свойство '0' неопределенных в JQuery

Cannot read property '0' of undefined

на moveup() в if(tab[j+1][col]==null&&tab[j][col]!=null). Какова ошибка и как ее решить? из предупреждающих сообщений я мог видеть, что ни один из них не определен. Итак, что вызывает проблему. В чем причина проблемы, поэтому я могу избежать ее в будущем. То, что дано в двух экземплярах, - это создать массив и не решить мою проблему. ошибка в библиотеке jquery по адресу dispatch и q.handle

+0

'tab' имеет только один ключ, который является' index (0) ', и он удерживает значение' 4' ... – Rayon

+0

@Rayon Почему не была ошибка, возникшая при любых вызовах других таблиц и как ее решить –

+0

@Rayon есть ли другой способ создания статического массива 4X4 в jquery –

ответ

0

вкладка - это массив. В этом массиве есть объекты.

Cannot read property '0' of undefined означает, что вы пытаетесь прочитать свойство неопределенного объектного>

var foo={bar:"test"} 
console.log(foo[bar]); //you get "test" 

в вашем случае:

var obj = tab[0] //obj is undefined 
console.log(obj[0]); //you get "Cannot read property '0' of undefined" 

если вы хотите проверить, вы можете легко проверить каждый объект используя:

if(tab[0]){ 
    //tab[0] is defined 
    if(tab[0][0]) 
    { 
     //tab[0][0] is defined 
    } 
} 
+0

Есть ли способ создать массив 4X4, который не имеет этой проблемы или существует обходное решение для Эта проблема. –

+0

вам нужно проверить, не определено ли obj: if (вкладка [0]) {// определена вкладка [0]} – laren0815

+0

Я знаю, как проверить. Я хочу знать, как это решить, чтобы я не получал никаких ошибок. –

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