ExtJS4:如何检查textarea上是否按下Shift + Enter

时间:2012-08-25 03:31:14

标签: javascript javascript-events extjs extjs4

如果按下 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。它未定义。

2 个答案:

答案 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!'); }
    }]
});