2014-04-15 3 views
1

event.preventDefaultevent.stopPropagation을 시도하고 이벤트 처리기에서 false를 반환했습니다.브라우저의 키 기본 동작 방지

브라우저의 특정 키 동작을 방지하지 못합니다.

예를 들어 내가 기록 AngularJS와 응용 프로그램, 다음 또는 이전 기록을 가져 오는에 (이전 다음,) 사이를 이동하는페이지 아래로 및 페이지 위로를 사용하고 싶습니다. 그것은 잘 작동합니다. 그러나 브라우저가 기본 동작을 수행하는 것을 막지는 않습니다. Page Down 또는 Page Up. 예를 들어, select (dropdown) 요소 위에 서있는 동안 버튼을 누르면 드롭 다운 선택이 변경되고 THEN은 다음 레코드로 이동합니다. 덮어 쓰기가 불가능한 다른 많은 유용한 키들도 마찬가지입니다 : , (포커스가있는 경우 첫 번째 또는 마지막 선택으로 선택 드롭 다운을합니다).

여기에 내 현재 코드입니다 :

당신이 내가 현재 다른 키를 사용하고 있습니다시피
$document.bind('keyup', function(e) { 
    switch (e.keyCode) { 
     case 109: 
      if (e.altKey) { 
       $scope.gotoPrev(e); 
       e.preventDefault(); 
       e.stopPropagation(); 
       window.scrollTo(0, 0); 
       return false; 
      } 
      break; 
     case 107: .... 

(Alt 키+, Alt 키- 등) 대신 페이지 아래로의 Page Up. 그러나 나는 그것들을 사용하고 싶었다.

또 다른 관련 질문은 URL 키로 탭 키 탭을 방지하는 방법입니다. 나는 그 페이지의 필드를 통해서만주기를 원하고 그 페이지에서 URL 영역으로 뛰어 내리지 않기를 원합니다.

+0

e.stopImmediatePropagation? – steven

+0

아니요 키를 누르기 전에 키를 눌렀을 때 기본 동작이 실행되기 때문입니다. 아래 답변에서 제안 된대로 나는 keydown에 dit를 바꾼다. 이제 기본 동작을 취소 할 수있다. –

답변

1

사용 '를 keyDown'보다는 '의 keyup'

keyup 화재 해당 키의 기본 동작을 수행 한 후 사용자가 키를 해제합니다. (http://www.quirksmode.org/dom/events/keys.html)

+0

노력했지만 작동하지 않습니다. 제안하기 전에 jsfiddle 또는 plunker에서 직접 해보십시오. –

+0

당신이 옳습니다! 그것은 효과가 있습니다. –