자바 스크립트에서 ctrl + z 키 조합 캡처


85

이 코드로 자바 스크립트에서 ctrl+ z키 조합 을 캡처하려고합니다 .

<html>
<head>
    <title>Untitled Document</title>
</head>
<body>

    <script type='text/javascript'>
        function KeyPress(e) {
            var evtobj = window.event? event : e


            //test1 if (evtobj.ctrlKey) alert("Ctrl");
            //test2 if (evtobj.keyCode == 122) alert("z");
            //test 1 & 2
            if (evtobj.keyCode == 122 && evtobj.ctrlKey) alert("Ctrl+z");
        }

        document.onkeypress = KeyPress;
    </script>

</body>
</html>

주석 처리 된 줄 "test1"은 ctrl키를 누른 상태에서 다른 키를 누르면 경고를 생성합니다 .

주석 처리 된 줄 "test2"는 z키를 누르면 경고를 생성합니다 .

"test 1 & 2"뒤의 줄에 따라 이들을 모으고 ctrl키를 누른 상태에서 키를 눌러도 z예상대로 경고가 생성되지 않습니다.

코드에 어떤 문제가 있습니까?

답변:


95
  1. 사용 onkeydown(또는 onkeyup), 아님onkeypress
  2. keyCode122가 아닌 90을 사용하십시오.

온라인 데모 : http://jsfiddle.net/29sVC/

명확히하기 위해 키코 드는 문자 코드와 동일하지 않습니다.

문자 코드는 텍스트 용입니다 (인코딩에 따라 다르지만 많은 경우 0-127이 ASCII 코드로 남아 있음). 키 코드는 키보드의 키에 매핑됩니다. 예를 들어, 유니 코드 문자 0x22909는 好를 의미합니다. 실제로 이것에 대한 키가있는 키보드 (있는 경우)는 많지 않습니다.

OS는 사용자가 구성한 입력 방법을 사용하여 키 입력을 문자 코드로 변환합니다. 결과는 키 누르기 이벤트로 전송됩니다. (keydown 및 keyup은 텍스트를 입력하지 않고 사용자가 버튼을 누를 때 반응합니다.)


1
감사합니다. onkeypress 및 keyCode 122가 작동하지 않는 이유는 무엇입니까?
Paul Johnston

솔루션에서 경고 대신에 preventDefault ()하는 방법은 무엇입니까? Ctrl + t를 테스트하고 있습니다.
Surendra Jnawali

@SJnawali : 나는 그것이 가능하다는 것을 확신하지 않는다ctrl+t
zerkms

4
keyCode 122가 작동하지 않는 이유는 무엇입니까? 물론 122입니다 F11의 : 키
아기

7
@PaulJohnston 코드는 문자 코드 와 같지 않기 때문 입니다. 문자 코드는 텍스트 용입니다 (인코딩에 따라 다르지만 많은 경우 0-127이 ASCII 코드로 남아 있음). 키 코드는 키보드의 키에 매핑됩니다. 예를 들어, 유니 코드 문자 0x22909는 好를 의미합니다. 실제로 이것에 대한 키를 가진 키보드 (있는 경우)는 많지 않습니다. OS는 사용자가 구성한 입력 방법을 사용하여 키 입력을 문자 코드로 변환합니다. 결과는 keypress이벤트 로 전송됩니다 . (반면 keydownkeyup응답 사용자에 텍스트를 입력하지, 버튼을 눌러.)
Aidiakapi

28

이 질문을 우연히 발견 한 미래의 사람들을 위해 다음과 같은 작업을 수행하는 더 좋은 방법이 있습니다.

document.addEventListener('keydown', function(event) {
  if (event.ctrlKey && event.key === 'z') {
    alert('Undo!');
  }
});

를 사용 event.key하면 코드가 크게 단순화되어 하드 코딩 된 상수가 제거됩니다. IE 9+를 지원합니다.

document.addEventListener또한를 사용 하면 동일한 이벤트에 대해 다른 리스너를 방해하지 않습니다.

마지막으로을 사용할 이유가 없습니다 window.event. 적극적으로 권장하지 않으며 코드가 손상 될 수 있습니다.


또한 KeyboardEvent.keyCode몇 년 전부터 사용이 중단되었습니다. 모든 브라우저를 캡처하는 가장 좋은 방법은 e.key먼저 확인한 다음 e.keyCode. 또는 이 polyfill 사용할 수 있습니다
예 베리

9

Ctrl+ t도 가능합니다 ... 키 코드를 84와 같이 사용하십시오.

if (evtobj.ctrlKey && evtobj.keyCode == 84) 
 alert("Ctrl+t");

6
$(document).keydown(function(e){
  if( e.which === 89 && e.ctrlKey ){
     alert('control + y'); 
  }
  else if( e.which === 90 && e.ctrlKey ){
     alert('control + z'); 
  }          
});

데모


3

90이 Z핵심이며 필요한 캡처를 수행합니다 ...

function KeyPress(e){
     // Ensure event is not null
     e = e || window.event;

     if ((e.which == 90 || e.keyCode == 90) && e.ctrlKey) {
         // Ctrl + Z
         // Do Something
     }
}

요구 사항에 따라 e.preventDefault();if 문에 를 추가 하여 사용자 지정 기능을 독점적으로 수행 할 수 있습니다.


-3

내가 만든이 플러그인이 도움이 될 수 있습니다.

플러그인

이 플러그인을 사용하여 다음과 같이 실행할 키 코드와 기능을 제공해야합니다.

simulatorControl([17,90], function(){console.log('You have pressed Ctrl+Z');});

코드에서 Ctrl+ 를 수행하는 방법을 표시했습니다 Z. 링크에서 자세한 문서를 얻을 수 있습니다. 플러그인은 Codepen의 내 펜의 JavaScript 코드 섹션에 있습니다.


-5

CTRL+ 에이 코드를 사용하십시오 Z. 키 Z누르기에 대한 키 코드 는 122이고 CTRL+ Z는 26입니다. 콘솔 영역에서이 키 코드를 확인하십시오.

 $(document).on("keypress", function(e) {
       console.log(e.keyCode);
       /*ctrl+z*/
       if(e.keyCode==26)
       {
          //your code here
       }
    });
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.