如何知道 .keyup() 是否是字符键(jQuery)
如何知道 .keyup() 是否是字符键(jQuery)
$("input").keyup(function() {
if (key is a character) { //such as a b A b c 5 3 2 $ # ^ ! ^ * # ...etc not enter key or shift or Esc or space ...etc
/* Do stuff */
}
});
How to know if .keyup() is a character key (jQuery)
$("input").keyup(function() {
if (key is a character) { //such as a b A b c 5 3 2 $ # ^ ! ^ * # ...etc not enter key or shift or Esc or space ...etc
/* Do stuff */
}
});
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
我正是想做到这一点,并且想到了一个同时涉及 keyup 和 keypress 事件的解决方案。
(我没有在所有浏览器中测试它,但我使用了 http://unixpapa.com 编译的信息/js/key.html)
编辑:将其重写为 jQuery 插件。
I wanted to do exactly this, and I thought of a solution involving both the keyup and the keypress events.
(I haven't tested it in all browsers, but I used the information compiled at http://unixpapa.com/js/key.html)
Edit: rewrote it as a jQuery plugin.
我从来不喜欢关键代码验证。我的方法是查看输入是否有文本(任何字符),确认用户正在输入文本而没有其他字符
I never liked the key code validation. My approach was to see if the input have text (any character), confirming that the user is entering text and no other characters
您无法使用
keyup
事件可靠地完成此操作。 如果您想了解有关键入字符的信息,则必须使用keypress
事件。以下示例在大多数浏览器中始终有效,但也有您应该注意的一些边缘情况。对于我认为的权威指南,请参阅 http://unixpapa.com/js/key。 html。
keyup
和keydown
为您提供有关按下的物理键的信息。在标准布局的标准美国/英国键盘上,这些事件的keyCode
属性和它们代表的字符之间似乎存在相关性。然而,这是不可靠的:不同的键盘布局将具有不同的映射。You can't do this reliably with the
keyup
event. If you want to know something about the character that was typed, you have to use thekeypress
event instead.The following example will work all the time in most browsers but there are some edge cases that you should be aware of. For what is in my view the definitive guide on this, see http://unixpapa.com/js/key.html.
keyup
andkeydown
give you information about the physical key that was pressed. On standard US/UK keyboards in their standard layouts, it looks like there is a correlation between thekeyCode
property of these events and the character they represent. However, this is not reliable: different keyboard layouts will have different mappings.注意:事后看来,这是一个快速而肮脏的答案,并且可能不适用于所有情况。要获得可靠的解决方案,请参阅 蒂姆·唐的回答(将其复制粘贴到此处,因为该答案仍在获得浏览和点赞):
以下是原始答案,但不正确,并且可能无法在所有情况下可靠地工作。
将键码与单词字符(例如,a
会匹配。空格
不会)好的,这是一个快速的答案。方法是相同的,但要注意键码问题,请参阅 quirksmode 中的这篇文章。
Note: In hindsight this was a quick and dirty answer, and may not work in all situations. To have a reliable solution, see Tim Down's answer (copy pasting that here as this answer is still getting views and upvotes):
The following was the original answer, but is not correct and may not work reliably in all situations.
To match the keycode with a word character (eg.,a
would match.space
would not)Ok, that was a quick answer. The approach is the same, but beware of keycode issues, see this article in quirksmode.
我对其他给出的答案并不完全满意。他们都有某种缺陷。
将
keyPress
与event.which
一起使用是不可靠的,因为您无法捕获退格键或删除键(如 Tarl 提到的)。使用
keyDown
(如 Niva 和 Tarl 的答案)要好一些,但该解决方案是有缺陷的,因为它尝试将event.keyCode
与String.fromCharCode( )
(keyCode 和 charCode 不一样!)。但是,我们通过
keydown
或keyup
事件得到的是实际按下的键 (event.key
)。据我所知,任何长度为 1 的
key
都是一个字符(数字或字母),无论您使用哪种语言键盘。如果这不正确,请纠正我!然后是 asdf 的很长的答案。这可能很有效,但似乎有点矫枉过正。
因此,这里有一个简单的解决方案,可以捕获所有字符、退格键和删除。 (注意:
keyup
或keydown
在这里可以工作,但keypress
不会)I'm not totally satisfied with the other answers given. They've all got some kind of flaw to them.
Using
keyPress
withevent.which
is unreliable because you can't catch a backspace or a delete (as mentioned by Tarl).Using
keyDown
(as in Niva's and Tarl's answers) is a bit better, but the solution is flawed because it attempts to useevent.keyCode
withString.fromCharCode()
(keyCode and charCode are not the same!).However, what we DO have with the
keydown
orkeyup
event is the actual key that was pressed (event.key
).As far as I can tell, any
key
with a length of 1 is a character (number or letter) regardless of which language keyboard you're using. Please correct me if that's not true!Then there's that very long answer from asdf. That might work perfectly, but it seems like overkill.
So here's a simple solution that will catch all characters, backspace, and delete. (Note: either
keyup
orkeydown
will work here, butkeypress
will not)这对我有帮助:
This helped for me:
如果您只需要排除
enter
、escape
和spacebar
键,您可以执行以下操作:在此处查看操作。
您可以参考 这里有完整的键码列表供您进一步修改。
If you only need to exclude out
enter
,escape
andspacebar
keys, you can do the following:See it actions here.
You can refer to the complete list of keycode here for your further modification.