javascript 버튼 이벤트 (각 브 라 우 저 호 환)

9042 단어
첫 번 째 부분: 브 라 우 저의 버튼 이벤트
js 로 키보드 기록 을 실현 하려 면 브 라 우 저의 세 가지 버튼 이벤트 유형, 즉 keydown, keypress 와 keyup 을 주목 해 야 합 니 다. 각각 onkeydown, onkeypress 와 onkeyup 세 가지 이벤트 핸들 에 대응 합 니 다.전형 적 인 버튼 은 이 세 가지 사건 을 모두 발생 시 킬 수 있 습 니 다. 키 다운, 키 프 레 스, 그리고 버튼 이 풀 릴 때의 키 업 입 니 다.
이 세 가지 이벤트 유형 중 키 다운 과 키 업 은 밑바닥 이 고 키 프레스 는 고 급 스 럽 습 니 다.여기 서 고급 이란 사용자 가 shift + 1 을 눌 렀 을 때 keypress 는 이 버튼 이 벤트 를 분석 한 후 인쇄 가능 한 '!' 문 자 를 되 돌려 주 는 것 을 말 합 니 다. keydown 과 keyup 은 shift + 1 이 벤트 를 기록 할 뿐 입 니 다.[1]
그러나 keypress 는 인쇄 할 수 있 는 문자 만 유효 하 며, 기능 버튼, 예 를 들 어 F1 - F12, Backspace, Enter, Escape, PageUP, PageDown 과 화살표 방향 등 은 keypress 사건 이 발생 하지 않 지만, keydown 과 keyup 사건 이 발생 할 수 있 습 니 다.그러나 FireFox 에서 기능 버튼 은 keypress 사건 을 일 으 킬 수 있다.
keydown, keypress, keyup 이벤트 핸들 에 전달 되 는 이벤트 대상 은 일반적인 속성 이 있 습 니 다.Alt, Ctrl 또는 Shift 가 하나의 버튼 과 함께 누 르 면 이벤트 의 altKey, ctrlKey, shiftKey 속성 을 통 해 이러한 속성 은 FireFox 와 IE 에서 통용 된다 는 것 을 나타 낸다.
두 번 째 부분: 호 환 브 라 우 저
브 라 우 저 와 관련 된 js 는 브 라 우 저 호 환 문 제 를 고려 해 야 한다.현재 자주 사용 되 는 브 라 우 저 는 주로 IE 기반 과 Mozilla 기반 두 가지 가 있 습 니 다.Maxthon 은 IE 커 널 을 기반 으로 하고 FireFox 와 Opera 는 Mozilla 커 널 을 기반 으로 한다.
2.1 이벤트 초기 화
먼저 이 사건 을 어떻게 초기 화 하 는 지 알 아야 합 니 다. 기본 문 구 는 다음 과 같 습 니 다.
   function keyDown(){}    document.onkeydown = keyDown;
브 라 우 저가 이 문 구 를 읽 을 때 키보드 의 어떤 키 를 눌 러 도 KeyDown () 함 수 를 호출 합 니 다.
2.2 FireFox 와 Opera 의 실현 방법
파이 어 폭 스 와 오페라 등 프로그램 이 IE 보다 번 거 롭 기 때문에 여기 서 먼저 설명 하 겠 습 니 다.
keyDown () 함수 에는 숨겨 진 변수 가 있 습 니 다. 일반적인 것 은 알파벳 'e' 를 사용 하여 이 변 수 를 표시 합 니 다.
   function keyDown(e)
변수 e 는 키 이벤트 가 발생 했 음 을 표시 합 니 다. 어떤 키 가 눌 렸 는 지 찾 습 니 다. which 속성 을 사용 하 십시오:
   e.which
e. which 는 이 키 의 색인 값 을 보 여 줍 니 다. 색인 값 을 이 키 의 알파벳 이나 숫자 값 으로 바 꾸 는 방법 은 정적 함수 String. from CharCode () 를 사용 해 야 합 니 다. 다음 과 같 습 니 다.
   String.fromCharCode(e.which)
위의 문 구 를 함께 놓 으 면 우 리 는 FireFox 에서 누 른 키 가 무엇 인지 얻 을 수 있다.
 
  
   function keyDown(e) {
      var keycode = e.which;
      var realkey = String.fromCharCode(e.which);
      alert(" : " + keycode + " : " + realkey);
   }
   document.onkeydown = keyDown;

2.3 IE 의 실현 방법
IE 의 프로그램 은 e 변 수 를 필요 로 하지 않 습 니 다. e. which 대신 window. event. keyCode 를 사용 하여 키 의 색인 값 을 실제 키 로 바 꾸 는 방법 은 다음 과 같 습 니 다. String. from CharCode (event. keyCode), 프로그램 은 다음 과 같 습 니 다.
 
  
   function keyDown() {
      var keycode = event.keyCode;
      var realkey = String.fromCharCode(event.keyCode);
      alert(" : " + keycode + " : " + realkey);
   }
   document.onkeydown = keyDown;

2.4 브 라 우 저 유형 판단
각종 브 라 우 저 에서 버튼 이벤트 대상 을 가 져 오 는 방법 을 알 게 되 었 습 니 다. 그러면 브 라 우 저 유형 을 판단 해 야 합 니 다. 이 방법 은 매우 많 고 이해 하기 편리 하 며 교묘 한 방법 도 있 습 니 다. 먼저 일반적인 방법 을 말 하 겠 습 니 다. navigator 대상 의 app Name 속성 을 이용 하 는 것 입 니 다. 물론 userAgent 속성 도 사용 할 수 있 습 니 다.브 라 우 저 종 류 를 appname 으로 판단 합 니 다. IE 와 Maxthon 의 appname 은 "Microsoft Internet Explorer" 이 고 FireFox 와 Opera 의 appname 은 "Netscape" 이기 때문에 간단 한 기능 을 가 진 코드 는 다음 과 같 습 니 다.
 
  
   function keyUp(e) {
      if(navigator.appName == "Microsoft Internet Explorer")
      {
        var keycode = event.keyCode;
        var realkey = String.fromCharCode(event.keyCode);
      }else
      {
         var keycode = e.which;
          var realkey = String.fromCharCode(e.which);
      }
      alert(" : " + keycode + " : " + realkey);
    }
   document.onkeyup = keyUp;

비교적 간결 한 방법 은 [2]:
 
  
   function keyUp(e) {
     var currKey=0,e=e||event;
     currKey=e.keyCode||e.which||e.charCode;
     var keyName = String.fromCharCode(currKey);
     alert(" : " + currKey + " : " + keyName);
   }
   document.onkeyup = keyUp;

위의 이런 방법 은 비교적 교묘 하 니 간단하게 설명 하 자.
우선, e = e | | 이벤트;이 코드 는 브 라 우 저 이벤트 대상 이 가 져 온 호 환 을 위 한 것 입 니 다.js 에서 이 코드 는 FireFox 나 Opera 에 숨겨 진 변수 e 가 존재 한다 면 e | | event 는 e 로 돌아 가 고 IE 에 숨겨 진 변수 e 가 존재 하지 않 으 면 event 로 돌아 간 다 는 뜻 입 니 다.
그 다음으로 currKey = e. keyCode | e. which | e. charCode;이 문 구 는 브 라 우 저 버튼 이벤트 대상 의 버튼 코드 속성 (세 번 째 부분 참조) 을 호 환 하기 위 한 것 입 니 다. 예 를 들 어 IE 에 서 는 키 코드 속성 만 있 고 FireFox 에는 which 와 charCode 속성 이 있 으 며 Opera 에는 키 코드 와 which 속성 등 이 있 습 니 다.
상기 코드 는 브 라 우 저 만 호 환 되 고 keyup 이벤트 대상 을 가 져 왔 습 니 다. 버튼 코드 와 버튼 의 문 자 를 간단하게 팝 업 했 습 니 다. 그러나 문제 가 발생 했 습 니 다. 버튼 을 눌 렀 을 때 문자 키 는 대문자 이 고 shift 키 를 눌 렀 을 때 표시 되 는 문자 가 이상 하기 때문에 코드 를 최적화 해 야 합 니 다.
세 번 째 부분: 코드 실현 과 최적화
3.1 버튼 이벤트 의 버튼 코드 와 문자 코드
버튼 이벤트 의 버튼 코드 와 문자 코드 는 브 라 우 저 간 의 이식 성 이 부족 합 니 다. 서로 다른 브 라 우 저 와 서로 다른 이벤트 에 대해 서 는 버튼 코드 와 문자 코드 의 저장 방식 이 다 릅 니 다. IE 에 서 는 하나의 키 코드 속성 만 있 고 그 해석 은 사건 유형 에 달 려 있 습 니 다.키 다운 에 있어 키 코드 는 버튼 코드 를 저장 하고 키 프레스 이벤트 에 있어 키 코드 는 문자 코드 를 저장 합 니 다.IE 에는 which 와 charCode 속성 이 없 기 때문에 which 와 charCode 속성 은 항상 undefined 입 니 다.
FireFox 에서 keyCode 는 항상 0 이 고 시간 keydown / keyup 일 때 charCode = 0, which 는 버튼 코드 입 니 다.이벤트 keypress 시 which 는 charCode 와 같은 값 으로 문자 코드 를 저장 합 니 다.
Opera 에 서 는 keyCode 와 which 의 값 이 항상 같 습 니 다. keydown / keyup 이벤트 에 서 는 버튼 코드 를 저장 합 니 다. keypress 시간 에 문자 코드 를 저장 합 니 다. charCode 는 정의 되 지 않 고 undefined 입 니 다.
3.2 keydown / keyup 또는 keypress 로
첫 번 째 부분 에 서 는 keydown / keyup 과 keypress 의 차 이 를 소개 하 였 으 며, 비교적 통용 되 는 규칙 이 있 습 니 다. keydown 사건 은 기능 버튼 에 있어 서 가장 유용 하 며, keypress 사건 은 인쇄 가능 한 버튼 에 있어 서 가장 유용 합 니 다 [3].
키보드 기록 은 주로 인쇄 가능 한 문자 와 일부 기능 버튼 을 대상 으로 하기 때문에 keypress 가 최 우선 입 니 다. 그러나 첫 번 째 부분 에서 언급 한 바 와 같이 IE 에서 keypress 는 기능 버튼 을 지원 하지 않 기 때문에 keydown / keyup 이벤트 로 보충 해 야 합 니 다.
3.3 코드 의 전체적인 사 고 를 실현 하고 keypress 이벤트 대상 으로 버튼 문 자 를 가 져 오고 keydown 이벤트 로 기능 문 자 를 가 져 옵 니 다. 예 를 들 어 Enter, Backspace 등 입 니 다.
코드 는 다음 과 같다.
 
  
!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

js






<br>var keystring = "";// <br>function $(s){return document.getElementById(s)?document.getElementById(s):s;} <br>function keypress(e) <br>{ <br>  var currKey=0,CapsLock=0,e=e||event; <br>  currKey=e.keyCode||e.which||e.charCode; <br>  CapsLock=currKey>=65&&currKey<=90; <br>  switch(currKey) <br>  { <br>    // 、 、 、 、 、 <br>    case 8: case 9:case 13:case 32:case 37:case 38:case 39:case 40:case 46:keyName = "";break; <br>    default:keyName = String.fromCharCode(currKey); break; <br>  } <br>  keystring += keyName; <br>} <br>function keydown(e) <br>{ <br>  var e=e||event; <br>  var currKey=e.keyCode||e.which||e.charCode; <br>  if((currKey>7&&currKey<14)||(currKey>31&&currKey<47)) <br>  { <br>    switch(currKey) <br>    { <br>      case 8: keyName = "[ ]"; break; <br>      case 9: keyName = "[ ]"; break; <br>      case 13:keyName = "[ ]"; break; <br>      case 32:keyName = "[ ]"; break; <br>      case 33:keyName = "[PageUp]"; break; <br>      case 34:keyName = "[PageDown]"; break; <br>      case 35:keyName = "[End]"; break; <br>      case 36:keyName = "[Home]"; break; <br>      case 37:keyName = "[ ]"; break; <br>      case 38:keyName = "[ ]"; break; <br>      case 39:keyName = "[ ]"; break; <br>      case 40:keyName = "[ ]"; break; <br>      case 46:keyName = "[ ]"; break; <br>      default:keyName = ""; break; <br>    } <br>    keystring += keyName; <br>  } <br>  $("content").innerHTML=keystring; <br>} <br>function keyup(e) <br>{ <br>  $("content").innerHTML=keystring; <br>} <br>document.onkeypress=keypress; <br>document.onkeydown =keydown; <br>document.onkeyup =keyup; <br>







코드 분석:
$(): ID 에 따라 dom 가 져 오기
keypress (e): 문자 코드 에 대한 캡 처 를 실현 합 니 다. 기능 버튼 은 keydown 으로 가 져 와 야 하기 때문에 keypress 에서 이 기능 버튼 을 차단 합 니 다.
keydown (e): 기능 버튼 을 가 져 왔 습 니 다.
keyup (e): 캡 처 한 문자열 을 보 여 줍 니 다.

좋은 웹페이지 즐겨찾기