是否可以使用KeyMap绑定到常规DOM元素

时间:2012-05-23 20:53:53

标签: javascript extjs extjs4 extjs4.1

我尝试过:

    new Ext.util.KeyMap({
        target: 'search',
        eventName: 'itemkeydown',
        binding: [
            {
                key: Ext.EventObject.ESC,
                scope: this,
                fn: function() {
                    console.log('esc');
                },
                defaultEventAction: 'preventDefault'
            }
        ]
    });

其中search是元素的id。虽然它没有绑定到元素 - 我将焦点传递给它,按ESCAPE并且不会触发回调。

我错过了什么?

PS:我也尝试了Ext.get('search')而不是search,结果相同。

PPS:search元素不是ExtJS控件,它是常规的<input type="text" ...>

1 个答案:

答案 0 :(得分:3)

这是我的工作代码:

var map = new Ext.util.KeyMap({
    target: 'search',
    eventName: 'keydown', // changed from itemkeydown -> keydown
    binding: [{
            key: Ext.EventObject.ESC,
            scope: this,
            fn: function() {
                console.log('esc');
            },
            defaultEventAction: 'preventDefault'
        }
    ]
});

我的HTML元素如下:

<input type="text" id="search"/>

keydown似乎是eventName的默认值。代码将在没有它的情况下工作。你也可以使用4.0风格来实现它:

var map = new Ext.util.KeyMap("search", {
    key: Ext.EventObject.ESC,
    handler: function() {
        console.log('esc');
    },
    scope: this,
    defaultEventAction: 'preventDefault'
});