1

が押された場合はフォームを送信し、+が押されたEnter場合はイベントを停止します。このコールバックには、Shift キーが押されたかどうかを確認する方法を提供しないパラメーターがあります。ShiftEnterExt.EventObject

と の 2 つの方法が.hasModifierあり.isSpecialKeyます。どちらも を返しますboolean。シフトキーが押されているかどうかを確認する方法はありません。どのように追跡するのですか?

これは私のテキストエリアコンポーネントです:

{
    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 に答える