2012-02-22 605 views
0

我略有困惑,为什么这个代码不工作:JS触发keydown事件

$(document).keydown(function(e){ 
     if (e.keyCode == 39) { 
      //RIGHT 
      document.getElementById('col_detector_right').innerHTML=""; 
      col_jack('right'); 
      if(document.getElementById('col_detector_right').innerHTML!=""){ 
      } 
      else{ 
       var left = document.getElementById('jack').style.left; 
       var current_left = parseFloat(left); 
       var new_left = current_left + 400; 

       document.getElementById('jack').style.left = new_left+'px'; 
      } 
      right = true; 
      return false; 
     } 
     if (e.keyCode == 37) { 
      //LEFT 
      document.getElementById('col_detector_right').innerHTML=""; 
      col_jack('right'); 
      if(document.getElementById('col_detector_right').innerHTML!=""){ 
      } 
      else{ 
       var left = document.getElementById('jack').style.left; 
       var current_left = parseFloat(left); 
       var new_left = current_left - 4; 

       document.getElementById('jack').style.left = new_left+'px'; 
      } 
      right = false; 
      return false; 
     } 
     if (e.keyCode == 38) { 
      //UP 
      return false; 
     } 
     if (e.keyCode == 40) { 
      //DOWN 
      return false; 
     } 
     if (e.keyCode == 32) { 
      //SPACE 
      if(right==true){ 
       var top = document.getElementById('jack').style.top; 
       var current_top = parseFloat(top); 
       var new_top = current_top -40; 

       document.getElementById('jack').style.top = new_top+'px'; 
       var left = document.getElementById('jack').style.left; 
       var current_left = parseFloat(left); 
       var new_left = current_left + 20; 

       document.getElementById('jack').style.left = new_left+'px'; 
       right=false; 
       var press = $.Event('keydown'); 
       press.which = 39; 
       $(document).trigger(press); 
      } 
      else{ 
       var top = document.getElementById('jack').style.top; 
       var current_top = parseFloat(top); 
       var new_top = current_top -40; 

       document.getElementById('jack').style.top = new_top+'px'; 
      } 

      return false; 
     } 
    }); 

specificly该位,不工作:

var press = $.Event('keydown'); 
press.which = 39; 
$(document).trigger(press); 

为什么呢?这个想法是,它应该触发右箭头键,但它不是?什么都没有发生,它要么没有触发它,要么没有正确检查keydown事件?我不知道是哪一个还是其他的东西?

+0

我从来没有上调用的事件在Javascript中,但我会建议检查一下:http://stackoverflow.com/a/203262/947514 你可以尝试设置新闻的keyCode,但一般来说它可能无法工作,更不用说在所有浏览器中工作。 – 2012-02-22 19:34:58

+0

按键无法正常工作,我不为什么上面的代码不起作用 – 2012-02-22 19:38:22

回答

8

你需要的属性的对象传递给jQuery的事件对象,像这样:

// Create a new jQuery.Event object with specified event properties. 
    var e = jQuery.Event("keydown", { keyCode: 64 }); 

    // trigger an artificial keydown event with keyCode 64 
    jQuery("body").trigger(e); 

阅读$ .Event API文档 - http://api.jquery.com/category/events/event-object/

+1

感谢这似乎工作,但不幸的是,这并没有解决我的问题,我希望这会解决它,但它doesn'吨,事情是在人按空间后,右箭头键千斤顶是向右跳,现在他这样做,但我继续按住右箭头,但千斤顶不再移动,我必须松开方向键然后再按一下,我希望你明白这一点,很难解释,但你有解决方案吗? – 2012-02-22 21:59:40