ExtJS4:我怎么能检查是否Shift + Enter键被压在一个textarea

问题描述:

我想提交表单,如果输入按下停止时如果 + 输入被按下。此回调具有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,因为它在每个新版本上变化很大。 –

这可以用的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

减票的原因是什么? –

为什么不在你的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对象的引用,以便在父组件被销毁时可以调用它。 –