2013-08-12 13 views
5

Mam zdarzenie związane z oknem działającym pod numerem keydown. Chciałbym to przetestować, wykonując procedurę (w odstępach) programowo uderzającą w klawisz na klawiaturze. Poniższy kod nie działa - ale działa dobrze, jeśli faktycznie naciskasz klawisz na klawiaturze.Wywoływanie zdarzeń kluczowych zdarzeń programowo w wanilii JavaScript

początkowo próbowałem:

var evt = document.createEvent("KeyboardEvent");  
setInterval(function() { 
    evt.initKeyEvent("keydown", true, true, window, false, false, false, false, 13, 13); 
}, 500); 

Oto mój obecny keydown wydarzenie:

window.addEventListener('keydown', function(k) { 
    switch(k.keyCode) { 
     case 38: //up 
      if (Game.Area[Game.Player.x][Game.Player.y-1].type !== 0 && Game.Player.y > 0) { 
       Game.Player.y--; 
      } 
      Game.Player.d = 0; 
      break; 
     case 40: //down 
      if (Game.Area[Game.Player.x][Game.Player.y+1].type !== 0 && Game.Player.y < Game.Area[0].length-1) { 
       Game.Player.y++; 
      } 
      Game.Player.d = 1; 
      break; 
     case 37: //left 
      if (Game.Area[Game.Player.x-1][Game.Player.y].type !== 0 && Game.Player.x > 0) { 
       Game.Player.x--; 
      } 
      Game.Player.d = 2; 
      break; 
     case 39: //right 
      if (Game.Area[Game.Player.x+1][Game.Player.y].type !== 0 && Game.Player.y < Game.Area.length-1) { 
       Game.Player.x++; 
      } 
      Game.Player.d = 3; 
      break; 
     case 66: 
      if (Game.Player.d === 0 && Game.Player.y > 0) { //up 
       Game.Area[Game.Player.x][Game.Player.y-1].type = 60; 
      } else if (Game.Player.d === 1 && Game.Player.y < Game.Area.length) { //down 
       Game.Area[Game.Player.x][Game.Player.y+1].type = 60; 
      } else if (Game.Player.d === 2 && Game.Player.x > 0) { //left 
       Game.Area[Game.Player.x-1][Game.Player.y].type = 60; 
      } else if (Game.Player.d === 3 && Game.Player.x < Game.Area.length) { //right 
       Game.Area[Game.Player.x+1][Game.Player.y].type = 60; 
      } 
      break; 
     default: 
      break; 
    } 
    Game.MoveZeds(); 

    for (var z = 0; z < Game.Zeds.length; z++) { 
     if (Game.Player.x === Game.Zeds[z].x && Game.Player.y === Game.Zeds[z].y) { 
      alert("Ouch!"); 
     } 
    } 
}); 
+0

Wysyłasz zdarzenie "keypress" podczas słuchania "keydown". Czy to może być problem? – zvona

+0

Otrzymuję następujący błąd w przypadku każdego zdarzenia: 'Uncaught TypeError: Object # nie ma metody 'initKeyEvent'' - zaktualizowane pytanie:) –

+0

initKeyEvent jest, jak sądzę, tylko Firefox. Sprawdź to: http://stackoverflow.com/questions/1897333/firing-a-keyboard-event-on-chrome – zvona

Odpowiedz

1

wierzę

evt.initKeyEvent(); 

powinny być rzeczywiście

evt.initKeyboardEvent(); 
+1

Wonderous - dziękuję, przyjmuję za 6 minut;) –

+1

'initKeyboardEvent' jest przestarzałe i jego użycie jest odradzane ([źródło] (https://developer.mozilla.org/en-US/docs/Web/API/ KeyboardEvent/initKeyboardEvent)) –

+0

initKeyboardEvent jest przestarzałe – AziCode

Powiązane problemy