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
。它的未定义。
这可以用的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;
}
}
}
你有没有考虑过使用键盘映射? –
是的。我已经使用了键盘映射。我不想使用它,因为它会加载另一个11K'.js'文件。 –
减票的原因是什么? –
为什么不在你的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!'); }
}]
});
您可能希望持有对KeyMap对象的引用,以便在父组件被销毁时可以调用它。 –
看起来我晚了晚会,但我测试了4.1.0 evt.shiftKey属性,它工作正常。你知道这是否是你的Ext JS版本中的错误? – Eric
@EricCook我正在使用4.0.6。根据手册'evt.shiftKey'应该设置。这可能是一个错误,或者我错过了一些东西。我不确定。 –
顺便说一句,我不想升级ExtJS,因为它在每个新版本上变化很大。 –