far*_*oft 65 javascript keyboard jquery events keycode
如何知道.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 */
}
});
Run Code Online (Sandbox Code Playgroud)
Tim*_*own 101
您无法通过此活动可靠地完成此操作keyup
.如果您想了解有关键入的字符的信息,则必须使用该keypress
事件.
以下示例将在大多数浏览器中始终有效,但您应该注意一些边缘情况.有关这方面的权威指南,请参阅http://unixpapa.com/js/key.html.
$("input").keypress(function(e) {
if (e.which !== 0) {
alert("Charcter was typed. It was: " + String.fromCharCode(e.which));
}
});
Run Code Online (Sandbox Code Playgroud)
keyup
并keydown
提供有关按下的物理键的信息.在标准布局中的标准美国/英国键盘上,看起来keyCode
这些事件的属性与它们所代表的角色之间存在关联.但是,这不可靠:不同的键盘布局将具有不同的映射.
Niv*_*vas 46
注意:事后看来,这是一个快速而肮脏的答案,可能无法在所有情况下使用.要有一个可靠的解决方案,请参阅Tim Down的答案(复制粘贴,因为这个答案仍然得到了观点和支持):
使用keyup事件无法可靠地执行此操作.如果您想了解有关键入的字符的信息,则必须使用keypress事件.
以下示例将在大多数浏览器中始终有效,但您应该注意一些边缘情况.有关这方面的权威指南,请参阅 http://unixpapa.com/js/key.html.
Run Code Online (Sandbox Code Playgroud)$("input").keypress(function(e) { if (e.which !== 0) { alert("Character was typed. It was: " + String.fromCharCode(e.which)); } });
keyup
并keydown
提供有关按下的物理键的信息.在标准布局中的标准美国/英国键盘上,看起来keyCode
这些事件的属性与它们所代表的角色之间存在关联.但是,这不可靠:不同的键盘布局将具有不同的映射.
以下是原始答案,但不正确,可能无法在所有情况下可靠地运行.
将键码与单词字符a
匹配(例如,匹配.space
不会)
$("input").keyup(function(event)
{
var c= String.fromCharCode(event.keyCode);
var isWordcharacter = c.match(/\w/);
});
Run Code Online (Sandbox Code Playgroud)
好的,这是一个快速的答案.方法是相同的,但要注意键码问题,请参阅quirksmode中的这篇文章.
Han*_*pio 14
我对其他答案并不完全满意.他们都有一些缺陷给他们.
使用keyPress
with event.which
是不可靠的,因为你无法捕获退格或删除(如Tarl所述).使用keyDown
(如在尼瓦的和TARL的答案)是好一点,但解决的办法是有缺陷的,因为它试图利用event.keyCode
与String.fromCharCode()
(键码,则charCode是不一样的!).
但是,我们对keydown
or keyup
事件所做的是按下的实际键(event.key
).据我所知,任何key
长度为1的都是一个字符(数字或字母),无论你使用哪种语言键盘.如果不是这样,请纠正我!
然后是asdf的那个很长的回答.这可能完美,但似乎有点矫枉过正.
所以这是一个简单的解决方案,它将捕获所有字符,退格和删除.(注意:任何一个keyup
或keydown
将在这里工作,但keypress
不会)
$("input").keydown(function(event) {
var isWordCharacter = event.key.length === 1;
var isBackspaceOrDelete = event.keyCode === 8 || event.keyCode === 46;
if (isWordCharacter || isBackspaceOrDelete) {
// do something
}
});
Run Code Online (Sandbox Code Playgroud)
小智 11
这对我有帮助:
$("#input").keyup(function(event) {
//use keyup instead keypress because:
//- keypress will not work on backspace and delete
//- keypress is called before the character is added to the textfield (at least in google chrome)
var searchText = $.trim($("#input").val());
var c= String.fromCharCode(event.keyCode);
var isWordCharacter = c.match(/\w/);
var isBackspaceOrDelete = (event.keyCode == 8 || event.keyCode == 46);
// trigger only on word characters, backspace or delete and an entry size of at least 3 characters
if((isWordCharacter || isBackspaceOrDelete) && searchText.length > 2)
{ ...
Run Code Online (Sandbox Code Playgroud)