Extjs监听按键事件检查是否为任何字符。

4

我似乎在任何地方都找不到。我想找到检查击键是否为字符的最佳方法。

listeners:{
    'keyup':function(f, e){
        //Is key a letter/character
    }
}

编辑

感谢所有回答的人,我知道如何检测实际按下的键,但我想知道如何检测按下的键是否是字符(而不是箭头、退格、回车等)。

4个回答

6
为了捕获键盘事件,您必须将组件的enableKeyEvents属性设置为true
...,
enableKeyEvents: true,
listeners:{
    'keyup': function(f, e){
        var charCode = e.getCharCode();
        var key      = e.getKey();
    }
},
...

参见 "检测按键",了解keyCodecharCode之间的区别。


谢谢你的回答,我能够获取到键和字符编码,但是我想要检查它是否是一个字符,任何字符都可以... - neolaser
你无法(可靠地)从 keyupkeydown 事件中获取有关键入字符的信息。它必须是 keypress - Tim Down

5

你需要捕获发送到事件的参数。然后评估 event.getKey()

listeners:{
    'keyup':function(field, event){
        if(event.getKey() >= 65 && event.getKey() <= 90) {
           //the key was A-Z
        }
        if(event.getKey() >= 97 && event.getKey() <= 122) {
           //the key was a-z
        }
    }
}

我能够使用那些方法(更新了带有参数的问题),但我不确定如何检查它是否有任何字符,而不必循环遍历... - neolaser
我更新了我的答案。无需执行循环 - 您可以按上述描述执行范围比较。 - Tommi

5

您需要为事件设置正确的参数。

'keyup': {
        fn: function(field,event) {
         //use event.getKey() to get the key
         }
    }

第一个参数是字段(表单元素),第二个参数是事件对象。您可以使用事件对象获取按键详细信息。根据您的需求使用getKey()getCharCode()方法。

getKey方法返回数字代码。您需要比较范围(a=65&z=90),以检查所按下的键是否为字符。Ext JS提供了一些静态变量来检查特殊键。


1

keyupkeydown 事件中无法判断按键是否产生了字符。唯一能够做到这一点的事件是 keypress。即使如此,在某些浏览器中,由于不一致的行为,检测起来仍然相当棘手。请参阅以下页面上的“3.2. 字符事件返回的值”部分:http://unixpapa.com/js/key.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接