2014-07-17 6 views
3

간단한 자바 스크립트 코드를 작성하고 onKeyDown/onKeyUp에 대한 이벤트 리스너를 추가했습니다. 그것은 정상적으로 작동하고 필요에 따라 Control 키를 감지합니다. 그러나 OS 단축키를 사용하는 경우에도 Ctrl 키가 눌러 진 것을 보여줍니다.Javascript onKeyDown function

구체적으로 말하자면 우분투에서 작업 공간을 전환하려면 Ctrl+Alt+ arrow keys을 사용하십시오. 따라서 작업 공간을 전환하고 다시 Chrome으로 돌아 오면 이미 Control 키가 눌 렸음을 알 수 있습니다.

단축키를 해제해도 onkeyup 메서드가 호출되지 않으므로 상태에 Ctrl 키가 눌 렸음을 나타냅니다. 어떻게 이것을 피합니까?

다음은 내 코드입니다 :

function keypressedfn(e){ 
if(e.which == CTRL_KEY){ 
    console.log("isCtrl pressed"); 
    isCtrl=true; 
    if(isWheel){ 
     e.preventDefault(); 
     e.stopPropagation(); 
    } 
} 
}; 

function keyreleasedfn(e){ 
if(e.which == CTRL_KEY){ 
    console.log("isCtrl released"); 
    isCtrl=false; 
    isWheel=false; 
} 
}; 

$(document).ready(function(){ 
$(document).keydown(keypressedfn); 
$(document).keyup(keyreleasedfn); 
}); 
+0

문서 요소에 키 이벤트가 추가 되었습니까? – Piwwoli

+1

문제가 Ubuntu 및 Chrome에서만 발생한다고 생각되면 태그를 추가하십시오. – RobG

+0

@Piwwoli, 예, 키 이벤트가 문서 요소에 추가됩니다. – user59077

답변

2

그런 다음, KeyUp 이벤트 전에 초점을 잃고 실행 /의 JS w 창문을 작업 영역을 변경하려면 Ctrl 키를 사용하는 경우. {을 console.log ("흐림");}

window.onblur = 함수(); 당신은 윈도우가 포커스를 잃을 때마다를 keyDown 폐기 window 객체에 이벤트를 바인딩 할 수 있습니다

코드의 자세한 내용을 보지 않고 나는 (그 문제에 대한 또는 Alt, 또는 Shift) Control 키의 KeyDown 이벤트를 감지하는 표준 방법이 아닙니다 그

+0

나머지 코드를 추가했습니다. 당신은 접근했습니다. 감사합니다 – user59077

1

보다 훨씬 더 말할 수 없습니다.

원하는 키를 누르면 찾을 수 있습니다. 예를 들어, Ctrl+S을 눌렀을 때 무언가를 저장하려면 S 키를 찾으십시오.

var keyCode = (e.which) ? e.which : e.keyCode; // keyCode will be 'S' 

if (e.ctrlKey && keyCode == 83) { 
    // Ctrl + S pressed. Do stuff. 
} 
+1

아마'var keyCode = typeof e.which == "number"를 사용하는 것이 더 안전할까요? e.which : e.keyCode' 왜냐하면'e.which'가 0이라면, 그 브라우저에서 지원되지 않는 e.keyCode를 시도 할 수 있습니다. 그리고 당신이 얻는 것은 * charCode *가 아닌 * keyCode *입니다. – RobG

+0

@RobG : 나는 그것을 간과했다. 지적 해 주셔서 고마워요. 그러나 실제로 키 코드가 0 일 수 있습니까? – Krumia

+0

0은 * null *이며, 키 누름에서 어떻게 가져올 지 모르지만 키보드 이외의 다른 유형의 입력 장치가 있으며 다른 방법으로 이벤트를 보낼 수 있습니다. – RobG