2016-07-30 8 views
0

keycheckメソッドが呼び出されるたびに上記のコードでkeyUpイベントは私のHTMLとjQueryコード

<!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> 
<div id="muse"></div> 
<script> 
    var tab; 
    $(document).ready(function() 
    { 
     var i,j; 
     tab=[ 
      [0,0,0,0], 
      [0,0,0,0], 
      [0,0,0,0], 
      [0,0,0,0]]; 
     for(row=0;row<4;row++) 
     { 
      for(col=0;col<4;col++) 
      { 
       num=tab[row][col]; 
       console.log("tab["+row+"]["+col+"]="+tab[row][col]); 
      } 
     } 
     console.log("Document ready"); 
     randomnum(); 
    }); 
    function randomnum() 
    { 
     var num=Math.random(); 
     console.log("called random num"); 
     if(num<0.5) 
      num=2; 
     else 
      num=4; 
     console.log("num="+num); 
     var row=Math.floor(Math.random()*10); 
     row=row%4; 
     var col=Math.floor(Math.random()*10); 
     col=col%4; 
     console.log("random row col"+row+" "+col); 
     while(tab[row][col]!=0) 
     { 
      console.log("false"); 
      var row=Math.floor(Math.random()*10); 
      row=row%4; 
      var col=Math.floor(Math.random()*10); 
      col=col%4; 
      console.log("random row col"+row+" "+col); 
     } 
     console.log("row:"+row+"col"+col); 
     tab[row][col]=num; 
     console.log("tab["+row+"]["+col+"]="+tab[row][col]); 
     $("#tab tr:eq("+row+") td:eq("+col+")").text(num); 
     keycheck(); 
    } 
    function keycheck() 
    { console.log("at key check"); 
     $(document).keyup(function(event){ 
      console.log(event.which) 
      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() 
    { console.log("moveup"); 
     var row,col,j,st; 
     for(col=0;col<4;col++) 
     { 
      for(row=0;row<3;row++) 
       { 
        for(j=row;j<3;j++) 
        { 
         if(tab[j][col]==0&&tab[j+1][col]!=0) 
         { 
          tab[j][col]=tab[j+1][col]; 
          tab[j+1][col]=0; 
         } 
        } 
       } 
      for(row=0;row<3;row++) 
      { 
       st=row+1; 
       /*while(tab[st][col]==0&&st<3) 
       { 
        //console.log(tab[st][col]); 
        st++; 
       }*/ 
       if(tab[row][col]==tab[st][col]) 
       { 
        tab[row][col]=tab[row][col]*2; 
        tab[st][col]=0; 
       } 
      } 
      for(row=0;row<3;row++) 
      { 
       for(j=row;j<3;j++) 
       { 
        if(tab[j][col]==0&&tab[j+1][col]!=0) 
        { 
         tab[j][col]=tab[j+1][col]; 
         tab[j+1][col]=0; 
        } 
       } 
      } 
     } 
     chntable(); 
    } 
    function movedown() 
    { 
     var row,col,j,st; 
     for(col=0;col<4;col++) 
     { 
      for(row=3;row>0;row--) 
      { 
       for(j=row;j>0;j--) 
       { 
        if(tab[j][col]==0&&tab[j-1][col]!=0) 
        { 
         tab[j][col]=tab[j-1][col]; 
         tab[j-1][col]=0; 
        } 
       } 
      } 
      for(row=3;row>0;row--) 
      { 
       st=row-1; 
       while(tab[st][col]==0&&st>0&&tab[row][col]!=0) 
       { 
        //console.log(tab[st][col]); 
        st--; 
       } 
       if(tab[row][col]==tab[st][col]) 
       { 
        tab[row][col]=tab[row][col]*2; 
        tab[st][col]=0; 
       } 
      } 
      for(row=3;row>0;row--) 
      { 
       for(j=row;j>0;j--) 
       { 
        if(tab[j][col]==0&&tab[j-1][col]!=0) 
        { 
         tab[j][col]=tab[j-1][col]; 
         tab[j-1][col]=0; 
        } 
       } 
      } 
     } 
     chntable(); 
    } 
    function moveright() 
    { console.log("moveup"); 
     var row,col,j,st; 
     for(row=0;row<4;row++) 
     { 
      for(col=0;row<3;row++) 
       { 
        for(j=col;j<3;j++) 
        { 
         if(tab[row][j]==0&&tab[row][j]!=0) 
         { 
          tab[j][col]=tab[j+1][col]; 
          tab[j+1][col]=0; 
         } 
        } 
       } 
      for(col=0;col<3;col++) 
      { 
       st=col+1; 
       /*while(tab[st][col]==0&&st<3) 
       { 
        //console.log(tab[st][col]); 
        st++; 
       }*/ 
       if(tab[row][col]==tab[st][col]) 
       { 
        tab[row][col]=tab[row][col]*2; 
        tab[st][col]=0; 
       } 
      } 
      for(col=0;col<3;col++) 
      { 
       for(j=col;j<3;j++) 
       { 
        if(tab[row][j]==0&&tab[row][j+1]!=0) 
        { 
         tab[j][col]=tab[j+1][col]; 
         tab[j+1][col]=0; 
        } 
       } 
      } 
     } 
     chntable(); 
    } 
    function chntable() 
    { 
     var row,col,num; 
     for(row=0;row<4;row++) 
     { 
      for(col=0;col<4;col++) 
      { 
       num=tab[row][col]; 
       //console.log("tab["+row+"]["+col+"]="+tab[row][col]); 
       $("#tab tr:eq("+row+") td:eq("+col+")").text(num); 
      } 
     } 
     randomnum(); 
    } 
</script> 
</body> 
</html> 

を押さずにトリガさキーは、アクションがトリガされispressed。問題は、以前のキーの押下もトリガーされていることです。たとえば、上矢印キーを初めて押してmoveupを押すと、トリガーされます。上向き矢印をもう一度押すと、moveupが1回ではなく2回トリガされます。同様に、3回目を押すと、3回トリガされます。なぜこうなった?解決策は何ですか? $(文書).click(関数()準備ができて、一度、その後、あなたのKEYCHECKですべてのキー入力のために再度keypressイベントを結合文書に

答えて

1

あなたの結合KeyPressイベントで

+0

どのように動作しません。これを解決するには? '$(document).click(ready)の代わりに' $(document).click(function) '。まだ問題が解決していません –

+0

あなたのドキュメントの準備はちゃんとできています。私が与えてくれたことを教えてください。 –

+0

私は解答を編集しました –

0

$(ドキュメント).ready(関数()の変更あなたの関数が複数回呼び出されている理由である()関数

ソリューション:。。 KEYCHECK()関数を削除し、外部のKEYCHECK機能であなたのコードを入れては

+0

が試さ –

関連する問題