2012-08-25 55 views
1

我想提交表單,如果輸入按下停止時如果 + 輸入被按下。此回調具有Ext.EventObject參數,該參數不提供任何方法來檢查是否按下了shiftkey。ExtJS4:我怎麼能檢查是否Shift + Enter鍵被壓在一個textarea

它有兩種方法.hasModifier.isSpecialKey。兩者都返回boolean。沒有辦法找到shiftkey是否被按下。我如何追蹤它?

這是我的textarea組件

{ 
    region : 'center', 
    margins : '5 0 0 0', 
    xtype : 'textarea', 
    name : 'chatmessage', 
    enableKeyEvents: true, 
    listeners: { 
     keydown: function(textfield, evt, eOpts){ 
      console.log(evt.getKey()); 
     } 
    } 
} 

我試過evt.shiftKey。它的未定義。

+0

看起來我晚了晚會,但我測試了4.1.0 evt.shiftKey屬性,它工作正常。你知道這是否是你的Ext JS版本中的錯誤? – Eric

+0

@EricCook我正在使用4.0.6。根據手冊'evt.shiftKey'應該設置。這可能是一個錯誤,或者我錯過了一些東西。我不確定。 –

+0

順便說一句,我不想​​升級ExtJS,因爲它在每個新版本上變化很大。 –

回答

2

這可以用的keydown和KeyUp事件標誌小動作來完成。

listeners : { 
    keydown : function(tf, e, opt) { 
     if (e.getKey() == e.SHIFT) { 
      this.shiftKeyPressed = true; // a flag 
      return; 
     } 
     if (e.getKey() != e.ENTER && (this.shiftKeyPressed == undefined || (this.shiftKeyPressed == false))) { 
      // Submit form 
      e.stopEvent(); 
     } 
    }, 
    keyup : function(tf, e, eOpts) { 
     if (e.getKey() == e.SHIFT) { 
      this.shiftKeyPressed = false; 
     } 
    } 
} 
+0

你有沒有考慮過使用鍵盤映射? –

+1

是的。我已經使用了鍵盤映射。我不想使用它,因爲它會加載另一個11K'.js'文件。 –

+0

減票的原因是什麼? –

1

爲什麼不在你的textarea上使用鍵盤映射(http://docs.sencha.com/ext-js/4-1/#!/api/Ext.util.KeyMap)?不能在這裏測試的代碼,但應該是這樣的:

var textArea= Ext.create('Ext.form.field.TextArea', { 
    region : 'center', 
    margins : '5 0 0 0', 
    xtype : 'textarea', 
    name : 'chatmessage', 
    enableKeyEvents: true 
}); 

var map = new Ext.util.KeyMap({ 
    target: textArea, 
    binding: [{ 
     key: Ext.EventObject.ENTER, 
     fn: function(){ alert('Enter pressed!'); } 
    }, { 
     key: Ext.EventObject.ENTER, 
     shift:true, 
     fn: function(){ alert('Shift+ENTER pressed!'); } 
    }] 
}); 
+1

您可能希望持有對KeyMap對象的引用,以便在父組件被銷燬時可以調用它。 –

相關問題