我有一个常规的文本框:
<input type="text">
Run Code Online (Sandbox Code Playgroud)
我使用jQuery来处理与键相关的事件:
$("input:text").keydown(function() {
// keydown code
}).keypress(function() {
// keypress code
}).keyup(function() {
// keyup code
});
Run Code Online (Sandbox Code Playgroud)
用户专注于文本框并按下键盘上的各种键(通常的键:字母,数字,SHIFT,BACKSPACE,SPACE,......).我需要检测用户何时按下将增加文本框值长度的键.例如,"A"键会增加它,"SHIFT"键不会.
我记得看过PPK的讲座,他提到了这两者之间的区别.它与事件有关 - keydown与keypress - 可能还有事件属性 - key,char,keyCode.
更新!
我需要在keydown或keypress处理程序中知道这些信息.我不能等待keyup事件发生.
为什么我需要这个:
我有一个文本框,其大小根据用户输入动态变化.你可以看看这个演示:http://vidasp.net/tinydemos/variable-size-text-box.html
在演示中,我有一个keydown和keyup处理程序.keyup处理程序根据输入值调整文本框大小.但是,keydown处理程序将大小设置为比输入值大1个字符.我这样做的原因是,如果我没有,那么角色将溢出文本框外,只有当用户放开键时,文本框才会展开.这看起来很奇怪.这就是我必须预测新角色的原因 - 在文字框中出现角色之前,我会在每个keydown上放大文本框.正如您在演示中看到的,这种方法看起来很棒.
然而,问题是BACKSPACE和ARROW键 - 它们还将扩展keydown上的文本框,并且只有在keyup上才会更正文本框大小.
解决方法:
解决方法是手动检测BACKSPACE,SHIFT和ARROW键,并根据:
// keydown handler
function(e) {
var len = $(this).val().length;
if (e.keyCode === 37 || e.keyCode === 39 ||
e.keyCode === 16) { // ARROW LEFT or ARROW RIGHT or SHIFT key
return;
} else if (e.keyCode === …Run Code Online (Sandbox Code Playgroud) char 已弃用charCode 已弃用key 触发可打印字符和控制键keyCode 已弃用which 已弃用keypress 已弃用input不火不属于元素input,textarea,select或者contenteditable -最烦人的tabindex是不够的建议的方法是将预定义key值列表保留为黑名单,并假设不存在可打印字符的内容吗?对于带有特殊/可编程键的键盘,如何解决这个问题?
当试图捕获非可打印字符时input|textarea|select|contenteditable,就像当前唯一的非hacky(没有不完整的范围或黑名单,如许多类似问题中所见)的方式,不使用已弃用的功能来使用隐藏input/ textarea并使用其值来捕获字符实际上改变了这个值?