2016-07-30 10 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> 

in dem obigen Code i die kann nicht lesen Eigenschaft '0' von undefined in jquery

Cannot read property '0' of undefined

bei moveup() in if(tab[j+1][col]==null&&tab[j][col]!=null)

bekommen. Was ist der Fehler und wie löst man ihn? Von den Alarmmeldungen konnte ich sehen, dass keine undefiniert sind. Was löst das Problem aus? Was ist die Ursache des Problems, so kann ich es in Zukunft vermeiden. Was in zweifacher Ausfertigung gegeben ist, ist Array zu erstellen und hat mein Problem nicht gelöst. der Fehler in der Jquery-Bibliothek um dispatch und q.handle

+0

'tab' hat nur eine Taste, die' index (0) 'ist und es hält den Wert' 4' ... – Rayon

+0

@Rayon warum wurde der Fehler nicht auf andere Tab-Aufrufe geworfen und wie man es löst –

+0

@ Rayon gibt es eine andere Möglichkeit, eine statische 4X4-Array in jquery zu erstellen –

Antwort

0

Registerkarte ist ein Array. In diesem Array haben Sie Objekte.

Cannot read property '0' of undefined bedeutet, dass Sie eine Eigenschaft eines undefinierten object->

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

in Ihrem Fall zu lesen versuchen:

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

, wenn Sie überprüfen möchten, können Sie einfach jedes Objekt überprüfen mit:

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

gibt es eine Möglichkeit, ein 4X4-Array zu erstellen, das dieses Problem nicht aufweist, oder gibt es eine Problemumgehung für dieses Problem. –

+0

Sie müssen überprüfen, ob das Obj undefiniert ist: Wenn (Tab [0]) {// Tab [0] definiert ist} – laren0815

+0

Ich weiß, wie zu überprüfen. ich möchte wissen, wie man das löst, damit ich keine fehler bekomme –