2014-02-24 1 views
1

현재 컨트롤을 누르면 감지해야하는 웹 응용 프로그램을 개발 중입니다.evt.ctrlKey는 jquery 키 업 이벤트에서 false를 반환합니다.

나는 keydown 이벤트를 사용하여 눌려진 키가 ctrl이면 플래그를 true로 설정하고 keyup 이벤트를 사용하여 플래그를 false로 설정합니다. 나는 눌린 키가 컨트롤 키이면 true를 쉽게 반환하기 위해 evt.ctrlKey을 사용하고 있습니다.

놀랍게도 evt.keyCode가 17과 같고 evt.ctrlKey이 나에게 거짓이라는 것을 알 수 있습니다.

이것은 keydown 이벤트에 발생하지 않습니다.

번복을 위해이 간단한 fiddle을 참조하십시오. 나는 파이어 폭스를 사용하고있다.

추신 : 나는 keyCode가 17인지 테스트 할 수 있지만 뭔가 놓쳤다는 것을 알고 싶다.

+0

다른 이벤트는 실제로 다른 키 코드와 같습니다. – Alex

+0

게시 된 내 피들에 특별한 것을 발견 했습니까? 내 이해가 잘못 되었나요? – Bnrdo

+2

틀린 것이 아니라, keyup도 ctrlkey에 대해 false를 반환했습니다. 그것의 다만 다른 사건에는 눌러 진 열쇠의 다른 국가가있다. 또한 ctrlkey는 다른 OS에서 신뢰할 수 없습니다 – Alex

답변

4

w3c docs에 따르면 ctrlKey 이벤트 속성은 표시가 true이면 true를 반환하고 그렇지 않으면 false를 반환하므로 코드가 올바르게 작동합니다. On keydown event ctrl이 눌려져 있기 때문에 keycode 17을 반환하고 keyup에서는 true를, ctrl을 누르지 않으면 결과는 17과 false가됩니다.

+0

저는 실제로 [여기] (http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-MouseEvent-ctrlKey)를 찾고 있습니다. "우울함"의 의미와 혼동된다. 나는 "우울함"이 "언론"인 "언론"의 반대를 의미한다고 생각했다. 나는 그때 그것의 의미를 봤다 "우울하다"그리고 실제로 당신의 대답에 의미가있는 "밀고 내려가는 원인"을 의미합니다. – Bnrdo

3

keyup에 대한 문서는 말한다 :

ctrlKey : true 이벤트가 해고했을 때 Ctrl 키를 눌렀합니다. 그렇지 않으면 false입니다.

키를 눌렀다가 놓은 후 키 업과 키 입력 이벤트가 발생합니다. . 따라서 ctrlKey의 상태는 keydown 이벤트의 경우 정확히 down이고 keyup 이벤트의 경우 up입니다. 보다 명확하게는 순서는 다음과 같습니다.

  1. CTRL 키를 누르십시오.
  2. 키 다운 이벤트가 발생합니다.
  3. 릴리스 CTRL 키.
  4. Keyup 이벤트가 발생합니다. 당신은 키 코드가 아닌 ctrlKey 속성을 확인해야CTRL자체를 찾고 있다면 또한

. 후자는 키 조합을 확인하는 것입니다. 예를 들어 CTRL + 인 경우 키 입력/keydown 이벤트가 { keyCode: 83, ctrlKey: true }인지 확인합니다.

관련 문제