2014-09-28 3 views
1

다음 코드를 실행하고 Mac에서 (Chrome 사용) 명령 키를 누르면 metakey가 keydown으로 설정되지만 키 업으로 설정되지 않습니다. 내가 뭔가 잘못하고 있는거야? 난 그냥 내 자바 스크립트 내에서 사용할 수 있도록 누르면되는 메타 키를 추적하기 위해 노력하고있어 - 더 좋은 방법이 있다면 여기에 jQuery가 키 업에서 변경자를 감지하지 못합니다.

var metaPressed = false; 
    $(document).keydown(function(e) { 
    console.log('keydown ' + e.keyCode); 
    if (e.metaKey || e.ctrlKey) { 
     console.log('meta pressed'); 
     metaPressed = true; 
    } 
    }); 
    $(document).keyup(function(e) { 
    console.log('keyup ' + e.keyCode); 
    if (e.metaKey || e.ctrlKey) { 
     console.log('meta unpressed'); 
     metaPressed = false; 
    } 
    }); 

는 관련 키에 대한 콘솔 출력입니다 :-) 알려 주시기 바랍니다

// Pressing cmd 
keydown 91 
meta pressed 
keyup 91 

// Pressing control 
keydown 17 
meta pressed 
keyup 17 

// Pressing non-meta like spacebar 
keydown 32 
keyup 32 
+3

잘 모르겠습니까? 예상대로 작동하지 않습니다. 버튼이 눌릴 때 keyup 이벤트가 발생합니다. keyup 이벤트가 올바른 keyCode로 시작된 경우에도 e.metaKey가 false로 설정됩니다. – adeneo

답변

1

jQuery가 수정 자 키를 처리하는 방법에 대해 오해했습니다. @adeneo 덕분에 프롬프트가 올바르게 표시됩니다.

또한 메타 문자가있는 상태에서 키를 누르면 (예 : M-x를 누르면 jQuery는 'M'도 공개 될 때까지 'x'에 대한 키 업을 보내지 않습니다. 따라서 "메타 다운, x 다운, x 업, 메타 업"과 같은 것에 대해 걱정할 필요가 없습니다.

0

키 업에서 해당 정보를 검색 할 수 없습니다. 이 (e.keyCode === 17 || e.keyCode === 91)을 테스트 케이스로 사용하는 것이 좋습니다 (각각 CTRL 및 META 임).

+0

이 키 코드는 브라우저에 따라 다릅니다. – Damien

+0

@Damien http://unixpapa.com/js/key.html 아래로 스크롤하면 CTRL 키가 여러 브라우저에서 일관성이 있음을 알 수 있습니다. Windows Meta는 Opera에서 올바르게 지원되지 않지만 브라우저 사용 점유율은 무시됩니다 (OP의 유스 케이스는 아님) – tfrascaroli

+0

MacOS의 각 브라우저마다 명령 키의 코드가 다르며 Safari는 2 개의 코드를 사용합니다. http://stackoverflow.com/a/3922353/438970을 참조하십시오. – Damien

관련 문제