如果按下 Enter ,我想提交表格,如果按 Shift + Enter ,则停止事件。对此的回调具有Ext.EventObject
参数,该参数不提供任何方法来检查是否按下了shiftkey。
它有两种方法.hasModifier
和.isSpecialKey
。两者都返回boolean
。无法找到是否按下shift键。我该如何追踪?
这是我的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 :(得分: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;
}
}
}
答案 1 :(得分: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!'); }
}]
});