简单的按键不会触发任何监听器

Posted

技术标签:

【中文标题】简单的按键不会触发任何监听器【英文标题】:simple keypress doesn't fire any listener 【发布时间】:2014-01-01 08:44:34 【问题描述】:

一个简单的煎茶新手问题,让我困惑了一段时间。我正在尝试在按键上触发事件。我希望将事件绑定在 TextField 上。我创建了一个小提琴

http://jsfiddle.net/CjyFt/1/

initComponent: function() 
    this.on('click', function() 
        console.log('Clicked'); // doesn't fire either
    );        

如果担心的话,我已经分别尝试过它们......

...        
enableKeyEvents: true,
listeners : 
    scope: this,
    'keypress' : function(textfield, e) 
        console.log('lovely'); // doesn't fire
    

...

我已经尝试将侦听器放置在每个父类中,并且我尝试绑定不同的事件而没有任何一个起作用,有人可以看看它是否很明显吗?

【问题讨论】:

【参考方案1】:

keypress 事件(以及相关的配置选项enableKeyEvents)在Ext.form.field.Text 中定义,但是您正在从Ext.form.field.Base 扩展您的类Ext.form.CustomField,这是Ext.form.field.Text 的父类因此没有这个事件(见class hierarchy)。

我已经更新了你的小提琴,它工作正常:http://jsfiddle.net/CjyFt/2/

我刚刚改了这个:

Ext.define('Ext.form.CustomField', 
    extend: 'Ext.form.field.Text', // instead of Ext.form.field.Base
...

按钮上的点击事件已经为我工作了,所以我认为这没有问题。

【讨论】:

啊!谢谢,现在我知道为什么它不起作用了,这很有意义。在我的辩护中,我应该如何知道enableKeyEvents 的定义位置? :( 您可以在docs 中看到它。在每个属性、函数或事件的右侧,显示定义它的类。另外,在Ext.form.field.Base 你不会找到这个配置。

以上是关于简单的按键不会触发任何监听器的主要内容,如果未能解决你的问题,请参考以下文章

监听菜单按键实现长按触发

监听菜单按键实现长按触发

WINFORM中用DSOFramer打开word,如何监听Ctrl+P按键事件?

调度 KeyEvent(或任何类型的事件?)时不会通知侦听器

vue监听enter回车按键并解决其他输入框触发

前端移动端监听键盘上的 开始/搜索 按键,并触发函数