2011-04-18 5 views
16

"SHIFT + TAB"조합을 캡처 할 수없는 이유가 무엇이든간에. 최신 jQuery를 사용하고 있습니다. 등JavaScript는 "Shift + Tab"조합을 캡쳐 할 수 없습니다

같은 결과 내가 다른 아약스/자바 스크립트를 사용하는 경우, 여기

은 "나는 현재를 이해 작동합니다 간단한 예 ...

event.which 또는 항상 event.KeyCode 있습니다 정의되지 않은

function ShiftTab() 
    { 
     debugger; 
     if(event.KeyCode == 9 && event.shiftKey) // neither this line nor the following work 
//  if (event.which == 9 && event.shiftKey) // shift + tab, traverse backwards, using keyboard 
     { 
     return true; 
     } 
     else 
     { 
     return false; 
     } 
    } 

이 또 다른 항목 탭에 관련된 것 같다 ... 그렇지 않으면 윈도우 기반 응용 프로그램/웹 또는 SHIFT + TAB "또는 뒤로 키보드 탐색, 전통적 고유의"유일한 shiftKey은을 포함하는 시나리오에 존재 " 더 이상 그 전통으로 작동하지 않는 질서 Microsoft.Net WinForm/WebForm 기반 응용 프로그램에서 일했습니다.

+2

이 질문이 완료되면 대답을 받아 들여야합니다. – Eli

답변

30

jQuery를 사용하는 경우 코드가 작동하는 방식이어야합니다. keyCode이 소문자인지 확인하십시오. 당신이 간결한 자바 스크립트로 경우

$(document).keyup(function (e) { 
    if (e.which === 9 && e.shiftKey) { 
     ShiftTab(); 
    } 
}); 

: 또한, jQuery를이 keyCodewhich로 정규화

$(document).keyup(function (e) { 
    e.which === 9 && e.shiftKey && ShiftTab(); 
}); 

jQuery를 1.7+ on 구문 :

$(document).on('keyup', function (e) { 
    e.which === 9 && e.shiftKey && ShiftTab(); 
}); 
+2

이것은 항상 효과가있는 것은 아니며 키 업과 관련이 있습니다. 그리고 그 이유는, 예를 들어 나는 먼저 교대 탭을 놓아 버리기 때문입니다. 그러면 9가 반환되고 탭은 눌려지기 때문에 false가됩니다. 탭을 먼저 놓으면 괜찮습니다. 하지만 keydown을 사용하면 탭이 작동하고 이미 이동했기 때문에 작동합니다. – bokkie

+0

'탭'을 놓은 순서에 상관없이이 기능은 저에게 맞지 않습니다. 왜 내 코드가 '탭'과 함께'shift' 키를 인식하지 못하는지 확실하지 않다 – CIA

+0

@CIA 나는 bokkie가 당신을 그의 대답에 넣었다고 생각한다. 하지만 기본적으로 onKeyUp는 각 키 (Shift 및 Tab)에 대해 한 번씩 두 번 발생합니다. 이벤트 핸들러는 기본적으로 SHIFT가 어떤 식 으로든 특별하다는 것을 전혀 모릅니다. 이것은 단지 또 다른 키입니다. 탭이 등록되어있는 동안 SHIFT를 확인할 수 있도록 KeyDown 또는 KeyPress에서 이벤트를 확인해야합니다. – RoboBear

0

은 내가 유선 함수를 생성 내 버튼의 onkeydown 이벤트까지. 캡처 할 것

  1. 때 onKeyPress 탭 키를 눌러
  2. 클릭 이동 : 때 onKeyPress 내 탭 키를 눌러

    function ShiftTab(evt) { 
         var e = event || evt; // for trans-browser compatibility 
         var charCode = e.which || e.keyCode; // for trans-browser compatibility 
    
         if (charCode === 9) { 
          if (e.shiftKey) { 
           $('#controlName').focus(); 
           return false; 
          } else { 
            return true; 
           } 
         } 
    

    을 캡처하지 않기 때문에 나는이 특정 문제를 해결하기 위해이 방법을했다, onKeyDown에 사용 -tab, shift 키를 누르면 함수가 트리거되므로 shiftkey 수정 자 검사를 중첩시켜야합니다.

0

키 누르기 이벤트 내에서 동일한 코드를 사용하십시오. 탭은 키 누르기와 키 업 사이에서 요소를 변경합니다. 여기에서 우리는 event.key = tab 및 event.shiftKey = true를 얻습니다.

관련 문제