2012-07-27 2 views
4

나는 그것이 가장 똑똑한 아이디어는 아니지만 여전히해야한다고 생각합니다. 사용자가 Tab과 같이 ENTER를 사용하려고합니다. 그래서, 내가 생각 해낸 최선은 이것이다 :ExtJs가 Enter 키를 누를 때 TAB 시뮬레이션

Ext.override(Ext.form.field.Base, { 
      initComponent: function() { 
       this.callParent(arguments); 

       this.on('afterrender', function() { 
        var me=this; 
        this.getEl().on('keypress',function (e){ 
         if(e.getKey() == 13) { 
          me.nextNode().focus(); 
         } 
        }); 
       }); 
      } 
     }); 

하지만 여전히 TAB과 정확히 같은 방식으로 작동하지 않습니다. 입력 필드에서는 정상적으로 작동하지만 다른 컨트롤에서는 작동하지 않습니다. 일부 저수준 솔루션이있을 수 있습니다. 아이디어가 있으십니까?

답변

0

면책 조항 : ExtJs에 대한 전문가가 아닙니다. 당신은이

if (e.getKey() === 13) { 
    e.keyCode = Ext.EventObject.TAB 
    this.fireEvent(e, {// any additional options 
    }); 
} 

정말 지금까지 자신이 시도하지 않은 시도 할 수

if (e.getKey() === 13) { 
    me.blur(); 
    return false; // cancel key event to prevent the [Enter] behavior 
} 
0

:

말했다, 어쩌면 뭔가를하려고합니다. 이 같은

내가 문서에 리스너를 첨부했습니다 과거에는
+0

아니, 이것은이입니다 내선 어떤 버전의 – mik

3

, 뭔가 : Ext.form.field.Text와 유사한 xtypes를 들어

Ext.getDoc().on('keypress', function(event, target) { 

    // get the form field component 
    var targetEl = Ext.get(target.id), 
     fieldEl = targetEl.up('[class*=x-field]') || {}, 
     field = Ext.getCmp(fieldEl.id); 

    if (
     // the ENTER key was pressed... 
     event.ENTER == event.getKey() && 

     // from a form field... 
     field && 

     // which has valid data. 
     field.isValid() 

     ) { 

     // get the next form field 
     var next = field.next('[isFormField]'); 

     // focus the next field if it exists 
     if (next) { 
      event.stopEvent(); 
      next.focus(); 
     }     
    } 
}); 
+0

를 작동하지 않는 이유는 무엇입니까? 내 생각 엔, ExtJS 4.x가 아닌 – mik

+0

@mik 이것은 4.1.0에서 저에게 효과적입니다. 나는 폼 필드에 그것을 사용하지 않는다는 것을 깨달았고 폼 필드 이벤트는 컴포넌트를 대상으로하지 않으므로 작동하지 않을 것입니다. 내 대답을 편집하여 양식 필드에서 구체적으로 작동합니다. – Geronimo

1

설정해야하는 추가 설정 enableKeyEvents있다 keypress/keydown/keyup 이벤트가 시작하기 전에. enableKeyEvents 구성 옵션을 기본값 (false)으로 설정해야합니다.

ExtJS API Doc

관련 문제