2011-04-19 3 views
4

개발중인 응용 프로그램을 정리하려면 일반적인 작업을위한 키보드 단축키를 추가하고 있습니다. 그래서 같이 이렇게 Ext.KeyMap 소송을 제기 할 수 있습니다 ...Ext.KeyMap을 사용하여 전체 키 입력을 수신하는 ExtJS

var map = new Ext.KeyMap("my-element", { 
    key: 13, // or Ext.EventObject.ENTER 
    fn: myHandler, 
    scope: myObject 
}); 

하지만 "SS"또는 "전분기"문자 즉, 특정 이중 키 입력을 감지 할 수 있습니다. 이 작업을 수행하는 방법을 모르겠다. ...

내 생각은 단수 키 입력을 감지하고 다음 키 입력을 감지하는 수신기를 추가하는 것입니다. 그리고 그들 사이의 갭을 처리하기 위해 x 시간이 지나면 리스너를 삭제하는 지연된 이벤트를 설정하십시오.

개선 사항/제안/경고 ??

답변

4

여기 왜 추가 수신기가 필요한지 잘 모르겠습니다. 이전 키 입력을 변수에 저장하지 마십시오 (키 스트로크가 발생한 타임 스탬프 포함). 그런 다음 가장 최근의 키 입력을 이전의 키 입력과 비교할 수 있습니다. 이들이 동일하고 저장된 타임 스탬프가 과거에 너무 멀지 않았다면, 그것은 당신이 뒤 따르는 이중 키입니다. 키 코드가 같지 않거나 저장된 타임 스탬프가 너무 오래된 경우 저장된 키 코드와 타임 스탬프를 새 값으로 업데이트하십시오.

+0

나는 당신이 말하는 것을 보았지만 .... 눌러지고 비교되는 모든 키를 저장해야하는 것은 나에게 좋은 연습 같지 않다. 나는 당신이 제안한 것 이외의 이중 스트로크를 감지 할 수있는 방법이 없다고 생각합니다 ... – neolaser

+0

이것이 무슨 뜻인지 확실하지 않지만 _every_ 키는 저장하지 않아도됩니다. 어쨌든, 나는이 접근법이 조금 복잡해 보일 수 있다고 생각하지만 실제로 코드를 작성하는 것은 매우 간단하고 짧은 논리 여야합니다. 게다가 메모리 타임 스탬프는 아주 작을 것입니다 (단지 마지막 키 코드와 타임 스탬프입니다). – Tommi

0

마지막으로 누른 키를 모두 기억할 필요는 없습니다. 더블 클릭 이벤트를 생각하면 유사하지만 두 번 클릭하는 것이 더 인기가 있기 때문에 이미 구현되어 있습니다. 이 같은

0

뭔가 : 했다 ENTER -이 를 입력하면 같은 또한 이벤트가 발생합니다 ENTER -이 - 삭제

function defineDoubleKeyMap(element, cfg) { 
    var repeated, timer; 
    return new Ext.KeyMap(element, { 
     key: cfg.key, 
     fn: function() { 
      if (repeated) { 
       // when clicked the second time 
       // stop timer and call our callback 
       repeated = false; 
       clearTimeout(timer); 
       cfg.fn.call(cfg.scope); 
      } 
      else { 
       // remember we clicked once, forget after delay 
       repeated = true; 
       // adjust the delay as needed. 
       // current 1 sec is probably too long 
       timer = (function(){ 
        repeated = false; 
       }).defer(1000); 
      } 
     } 
    }); 
} 

defineDoubleKeyMap("my-element", { 
    key: Ext.EventObject.ENTER, 
    fn: myHandle, 
    scope: myObject 
}); 

이 코드를 가진 probem 빠르게 눌러 가 ENTER이다 눌렀다. 그게 용납 될 수 없다면, 당신은 모든 키를 추적해야합니다 - 당신이 그걸 위해 Ext.get("my-element").on("keypress")을 사용해야 할 것 같아요.

관련 문제