在keydown上获取.val()*不是* keyup

时间:2011-09-28 21:45:04

标签: jquery javascript-events

我正在编写一个将小部件修改为文本区域的库,因此我需要检测用户何时开始输入内容:

this.$input.bind('keydown keyup', function() {
    if (this.$input.val() == …) { … }
}

.val()仅在触发keyup时更新。那是太多的延迟。我想知道keydown上输入框的状态。你知道一个改进.val()的库吗?

4 个答案:

答案 0 :(得分:5)

太晚了?无法想象10ms会产生多大影响的场景,但你总是可以检查事件args并从中获取char。或者试试keypress

编辑还有input event一旦输入发生变化就会被触发(在键盘之前,但在值发生变化之后);

答案 1 :(得分:3)

确定keydown / keypress字符的唯一方法是使用event.keyCodeevent.which属性(其中event是一个对象,通过作为事件监听器函数的第一个参数。)

交换keypress事件的事件。按下该键时会触发此事件侦听器。 keydownkeyup只会被解雇一次。在keydown / keyup事件期间,可能已添加多个字符。

答案 2 :(得分:3)

Found a seemingly perfect solution。使用前面提到的HTML5 oninput和IE onpropertychange后备。辉煌。太棒了。其他快乐的话。

答案 3 :(得分:1)

对于按键(例如“a”键),在将“a”附加到文本输入之前触发keydown事件。您可以检测事件类型,以及.keyCode(或.which)事件属性是否是可打印范围内的键,并尝试预测.val()可能在{{1}之后返回事件,但这是一个坏主意

keyup