2013-07-04 7 views
0

jQuery를 사용하지 않고 다른 주류 브라우저와 함께 IE8을 지원한다고 가정 해보십시오. 이벤트를 정상화하기 위해 e.keyCode 이전에 e.keyCode를 확인해야합니까?

, 나는이 패턴 다음입니다 : 그러나

document.onkeydown = function(e) { 

    var code; 

    if (!e) { 
     var e = window.event; 
    } 

    code = e.which || e.keyCode; 

    // More stuff here... 
}; 

을, 나는 의심이 나는 ...

과 같이, e.keyCode 검사 대 내 e.which의 순서를 변경 한 경우
code = e.keyCode || e.which; 

... 내 코드 은 브라우저마다 다르게 작동합니다.

  1. 질문 : 주문이 중요합니까? 하나의 주문은 다른 주문보다 "더 나은가요?"
  2. 보너스 : IE8 이상 만 지원하는 경우 e.charCode가 중요합니까?
  3. 또 다른 보너스 : "var e = window.event"또는 "e = window.event"를 사용해야합니까?
+1

'code = e.which || e.keyCode'? –

+0

제안 해 주셔서 감사합니다. 나는 그 스타일을 앞으로 사용할 것이다. – Jackson

+0

"which"는 "keyCode"를 지원하지 않는 브라우저를 사용하고 있습니까? – dandavis

답변

1

1. 예, 순서가 중요합니다.

사용한다 순서은 참으로 : 대부분의 브라우저 (물론, IE<9 excluded) e.which를 지원하기 때문에

code = e.which || e.keyCode; 

이입니다. 이렇게하면 e.which을 지원하는 모든 브라우저 (IE> = 9 및 FF, Chrome, Opera, Safari 등)가이 브라우저를 사용하고, 사용하지 않는 브라우저는 e.keyCode을 사용합니다. 당신은 당신에게 내가 의심을 누르면하지만 결과 문자 한 키를 (말할 것이다 거의 모든 브라우저 (대신 e.which을의)에 대한 e.keyCode를 얻을 수 있습니다

code = e.keyCode || e.which; 

:

당신에게 순서를 전환해야 당신이 원하는 것이 아닙니다.)

2. 아니요, e.charCode는 중요하지 않습니다.

브라우저에서 e.charCode is spotty at best을 지원합니다. IE9 documentation조차도 호환성 만 있다고 명시하고 있습니다. 가장 인기있는 최신 브라우저는 undefined 또는 0 (또는 ASCII 또는 확장 ASCII, 행운의 경우라도 keypress에만 해당)을 반환합니다.

에 대한

추가 독서 2 아마에서 수행해야 1모두 :

당신이 I made a fiddle for you에, 키 이벤트와 함께 놀러 할해야 유일한 입력 필드에 입력 할 때 이벤트 매개 변수의 [관련] 등록 정보를보고하십시오.

3. 반드시 var e = window.event;을 사용해야합니다.

var을 사용하지 않으면 실제로 window.e = window.event이라는 어리석은 것으로 선언됩니다. var을 사용하여 처리기의 범위에 e을 정의하십시오.

+0

확실한 답변을 해주셔서 감사합니다! quirksmode 링크는 시대에 뒤 떨어진 것처럼 보이지만 바이올린은 훌륭합니다. 나는 그 북마크를 유지할 것이다. – Jackson