2013-03-25 4 views
0

나는 버튼으로 작동하는 div가 있습니다. 버튼을 클릭하면 키 누르기를 시뮬레이션 할 수 있습니다. Stackoverflow의 다른 곳에서는 사람들이 jQuery.Event("keydown");을 사용하도록 제안했지만 제안 사항은 모두 .click이 아니라 버튼에 바인딩 된 .trigger()을 사용합니다. 그래서, 내 예제 코드는 다음과 같습니다 : 나는 JSFiddle에서 더미 예를 설정 한Jquery가 포함 된 가상 키보드

var press = jQuery.Event("keydown"); 
press.which = 69; // # The 'e' key code value 
press.keyCode = 69; 

$('#btn').click(function() { 
    $('#testInput').focus(); 
    $(this).trigger(press); 
    console.info(press); 
}); 

: 키 누르기 폼 요소에 입력이보다는 결국 http://jsfiddle.net/ruzel/WsAbS/

을, 난 그냥 원하는 MelonJS 게임이 가질 수 있도록 이벤트를 키 누르기로 문서에 등록하십시오.

업데이트 : 키보드 이외의 키 누르기를 트리거하는 것이 보안상의 이유로 브라우저에서 무시되는 것 같습니다. 텍스트 입력을 업데이트하는 경우,이 아주 좋은 jQuery 플러그인 트릭 할 것입니다 다음 MelonJS의 경우에 솔루션을 찾고 여기에 오는 사람에 관해서는 http://bililite.com/blog/2011/01/23/improved-sendkeys/

을, 그것과 같이, MelonJS의 me.input 객체를 사용하는 것이 가장 좋습니다 :

$('#btn').mousedown(function() { 
    me.input.triggerKeyEvent(me.input.KEY.E, true); 
}); 

$('#btn').mouseup(function() { 
    me.input.triggerKeyEvent(me.input.KEY.E, false); 
}); 
+0

그럼 뭐가 궁금한가요? 'document'에서 그것을 트리거하고 싶다면'this' 대신에 그것을 사용하십시오. – Ian

+0

MelonJS에 필요한 것이 확실하지 않지만 $ ('testInput'), trigger (press); 대신'$ ('testInput')을 찾고 있다고 생각합니다. $ (this) .trigger (press);'. 실제로 텍스트를 텍스트 상자에 삽입하지는 않지만 해당 텍스트 상자에서 누른 키 코드를 시뮬레이트합니다. 그리고 자동으로'문서화'('.trigger'의 성질)까지 버블 될 것입니다 - http://jsfiddle.net/WsAbS/5/ – Ian

+0

고마워, 이안. 네, 위의 업데이트에서 말했듯이 실제 키보드의 보안상의 이유로 들어오지 않는 입력에 키 누르기를 보낼 수없는 것처럼 보입니다. MelonJS에 관해서도, 나는 위의 업데이트에서 그것을 언급했다. – russellmania

답변

1

이유는 확실하지 않지만이 이 이벤트를 올바르게 트리거하고 있습니다 (). 입력이 문자로 채워지지 않습니다.

나는 우리가 그것을 밖으로 시도 $(document).trigger(p)

을 말할 때 문서가 실제로 키 누르기 이벤트를 수신하고 있음을 표시하는 코드를 수정했습니다

http://jsfiddle.net/WsAbS/3/

var press = jQuery.Event("keydown"); 
press.which = 69; // # Some key code value 
press.keyCode = 69; 
press.target = $('#testInput'); 


$(document).on('keydown', function(event) { 
    alert(event.keyCode); 
}); 

$('#btn').click(function() { 
    $(document).trigger(press); 
}); 
내가이 충분히 잘한다고 생각을 당신의 MelonJS 게임의 최종 목표는 키 누르기를 선택하는 것입니다.

+0

하지만 이것은 필요하지 않습니다. '$ (this)'(또는'document'의 무엇이든)에서 이벤트를 트리거하면 이벤트가'document'까지 버블 링되어 어쨌든 catch됩니다. – Ian

+0

좋아요,하지만 요점은 keydown 이벤트를 유발한다는 간단한 증거를 만드는 것이 었습니다. 우리가 정말로 '이 문서'와 '문서'를 접한다면, 먼저 '문서'라고 말하면 어떨까요? 그것은 명확하고 컴퓨터 시간을 절약 할 수 있습니다. – danmcardle

+0

당신이 말한 것은 사실이지만 텍스트 상자의 keydown 이벤트를 시뮬레이트하지는 않습니다. 예를 들어, 일반적인 keydown 이벤트 (키보드의 키를 물리적으로 누르는 것과 같음)와 같이 DOM 체인을 버블 링하지 않습니다. 이 이벤트를 청취하는 다른 요소가 정확한 발신을 요구하지 않는 것을 어떻게 알 수 있습니까?나는 OP가 틀린 요소에서 어쨌든 그것을 트리거하고 있다고 생각한다 -'this'는 의사 버튼을 참조하지만,'input' 요소에서 그것을 트리거해야한다. 정확성이 "컴퓨터 시간 절약"보다 더 중요한 것 같지만 MelonJS가 필요로하는 것이 무엇인지 다시는 알지 못합니다. – Ian

1

가상 키보드를 원하면 (제목에서 알 수 있듯이) this을 사용할 수 있습니다.

+0

정확히 내가 찾던 것이 아니라 링크의 명성. 나는 그것이 미래에 편리하게 올 것이라고 확신한다. – russellmania