相关疑难解决方法(0)

如何检测按下的键是否会在<input>文本框中产生一个字符?

我有一个常规的文本框:

<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)

javascript jquery keyboard-events

34
推荐指数
4
解决办法
4万
查看次数

确定按键是否导致输入可打印的Unicode字符而不使用已弃用的API

建议的方法是将预定义key列表保留为黑名单,并假设不存在可打印字符的内容吗?对于带有特殊/可编程键的键盘,如何解决这个问题?

当试图捕获非可打印字符时input|textarea|select|contenteditable,就像当前唯一的非hacky(没有不完整的范围或黑名单,如许多类似问题中所见)的方式,不使用已弃用的功能来使用隐藏input/ textarea并使用其值来捕获字符实际上改变了这个值?

html javascript unicode html5

8
推荐指数
1
解决办法
691
查看次数

标签 统计

javascript ×2

html ×1

html5 ×1

jquery ×1

keyboard-events ×1

unicode ×1