2012-02-22 4 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

을, 그러나 이것을 확인하는 것이 좋습니다 : http://stackoverflow.com/a/203262/947514 프레스의 keyCode를 설정해 볼 수도 있지만 일반적으로 모든 브라우저에서 작동하지 않을 수 있습니다. –

+0

keypress도 잘 동작하지 않습니다. 위의 코드가 작동하지 않는 이유가 없습니다. –

답변

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

고맙게도 작동하는 것 같지만 불행히도 문제가 해결되지 않았기 때문에 해결할 수 있었으면 좋겠지 만, 그 사람이 공간을 누른 후 물건이 나왔다. 그리고 오른쪽 화살 키 잭은 오른쪽으로 뛰기위한 것이고, 지금 그는 그것을한다. 그러나 나는 오른쪽 화살을 계속 잡고있다. 그러나 잭은 더 이상 움직이지 않는다, 나는 화살 키를 놓아야한다. 그런 다음 다시 눌러주십시오. 이해하기를 바랍니다. 설명하기가 어렵지만 해결책이 있습니까? –