2013-06-19 1 views
1

다음 이유가 작동하지 않는 이유를 알아 내려고합니다.이벤트 핸들러에서 Keydown 이벤트를 선택하지 못했습니다.

keydown 이벤트 처리기를 설정하고 이벤트를 트리거합니다. 그러나 핸들러는 그것을 감지하지 못합니다.

누구나 나를 밝힐 수 있다면!

function onKeyDown(event) 
{ 
alert('keydown'); 
} 

document.addEventListener('keydown', onKeyDown, false); 

var keydown = jQuery.Event('keydown', {which:38, keyCode:38}); 

$(document).keydown(); 
$(document).trigger(keydown); 

는 jsfiddle : http://api.jquery.com/trigger/ 가입일 http://jsfiddle.net/4bf3z/

답변

1

강조 첨가 :

상관 이벤트 핸들러 CSTE 연구진 부착() 또는 단축 방법 하나 트리거 될 때 해당 이벤트 발생합니다. 그러나 .trigger() 메소드를 사용하면 수동으로 을 실행할 수 있습니다. .trigger() 호출 은 사용자가 자연스럽게 이벤트 을 트리거 한 경우와 동일한 순서로 처리기를 실행합니다.

그래서, 당신이 대신 순수 자바 스크립트와 jQuery 핸들러를 첨부 할 경우 예상대로 작동합니다

function onKeyDown(event) 
{ 
    alert('keydown'); 
} 

$(document).on('keydown', onKeyDown); // <---- 

var keydown = jQuery.Event('keydown', {which:38, keyCode:38}); 

$(document).keydown(); 
$(document).trigger(keydown); 
+0

감사합니다. 나는이 솔루션을 사용하고 바닐라 자바 ​​스크립트 코드를 대체했다. 그 이유는 event.keyCode를 올바르게 설정하는 데 필요한 조정 및 해결 방법이 너무 많아서 jQuery를 사용하는 것이 더 간단한 해결책 이었기 때문입니다. – Vigrond

+0

@Vigrond : 그런데 실제 문제를 해결하기 위해 이벤트를 보낼 수 있다면 함수를 대신 호출해야합니다. – Ryan

1

jQuery의 triggeronly triggers jQuery-attached events. 실제 DOM 이벤트를 트리거하는 것은 까다 롭습니다, 키보드 이벤트 모듈은 여전히 ​​작업 초안 : initKeyboardEvent

var e = document.createEvent('KeyboardEvents'); 
e.initKeyboardEvent('keydown'); 
document.dispatchEvent(e); 

인수가 MSDN 있습니다. Firefox는 initKeyEvent을 사용합니다.

Updated jsFiddle

관련 문제