1

如果按下,我想提交表单并在按下+Enter时停止事件。此回调具有参数,该参数不提供任何方法来检查是否按下了 shiftkey。ShiftEnterExt.EventObject

它有两种方法.hasModifier.isSpecialKey。两者都返回boolean。没有办法找到是否按下了 shiftkey。我该如何追踪它?

这是我的文本区域组件:

{
    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。它的未定义。

4

2 回答 2

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;
        }
    }
}
于 2012-08-25T19:24:51.700 回答
1

你为什么不在你的文本区域使用键盘映射(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!'); }
    }]
});
于 2012-08-25T08:22:21.420 回答