2013-08-12 10 views
5

में प्रोग्रामेटिक रूप से एक कीडाउन घटना को ट्रिगर करना मेरे पास keydown पर चल रही विंडो से जुड़ा एक ईवेंट है। मैं कीबोर्ड पर एक कुंजी मारने के लिए एक नियमित (प्रति अंतराल) प्रोग्रामेटिक रूप से मार कर इसका परीक्षण करना चाहता हूं। निम्न कोड काम नहीं करता है - लेकिन अगर मैं वास्तव में कीबोर्ड पर एक कुंजी दबा रहा हूं तो ठीक काम करता है।वेनिला जावास्क्रिप्ट

मैं मूल रूप से करने की कोशिश की:

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

यहाँ मेरे वर्तमान keydown घटना है:

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

जब आप "कीडाउन" सुन रहे हों तो आप "कीप्रेस" ईवेंट भेज रहे हैं। क्या यह समस्या हो सकती है? – zvona

+0

मुझे किसी भी घटना के साथ निम्न त्रुटि मिलती है: 'Uncaught TypeError: ऑब्जेक्ट # <कीबोर्डइवेंट> में कोई विधि नहीं है' initKeyEvent'' - अद्यतन प्रश्न:) –

+0

initKeyEvent, मुझे लगता है, केवल फ़ायरफ़ॉक्स है। इसे तब जांचें: http://stackoverflow.com/questions/1897333/firing-a-keyboard-event-on-chrome – zvona

उत्तर

1

मेरा मानना ​​है कि

evt.initKeyEvent(); 

वास्तव में होना चाहिए

evt.initKeyboardEvent(); 
+1

आश्चर्यजनक - धन्यवाद, मैं 6 मिनट में स्वीकार करूंगा;) –

+1

'initKeyboardEvent' को बहिष्कृत किया गया है और इसका उपयोग निराश है ([स्रोत] (https://developer.mozilla.org/en-US/docs/Web/API/ कीबोर्डइवेंट/initKeyboardEvent)) –

+0

initKeyboardEvent को बहिष्कृत किया गया है – AziCode

संबंधित मुद्दे