Jquery 在keydown*而不是*keydup上获取.val()
我正在编写一个将小部件修改为文本区域的库,因此我需要检测用户何时开始键入内容:Jquery 在keydown*而不是*keydup上获取.val(),jquery,javascript-events,Jquery,Javascript Events,我正在编写一个将小部件修改为文本区域的库,因此我需要检测用户何时开始键入内容: this.$input.bind('keydown keyup', function() { if (this.$input.val() == …) { … } } .val()仅在触发keyup时更新。耽搁太久了。我想知道keydown上输入框的状态。你知道有一个库改进了.val()?太晚了吗?无法想象10ms会有这么大的不同,但是您可以随时检查事件args并从中获取字符。或者试试看 编辑:还有一种方法在
this.$input.bind('keydown keyup', function() {
if (this.$input.val() == …) { … }
}
.val()
仅在触发keyup
时更新。耽搁太久了。我想知道keydown
上输入框的状态。你知道有一个库改进了.val()
?太晚了吗?无法想象10ms会有这么大的不同,但是您可以随时检查事件args并从中获取字符。或者试试看
编辑:还有一种方法在输入更改时立即触发(在键控之前,但在值更改之后) 确定
keydown
/keypress
处字符的唯一方法是使用event.keyCode
或event.which
属性(其中event
是一个对象,作为第一个参数传递给事件侦听器函数)
将事件交换为按键
事件。此事件侦听器在按键时被激发keydown
和keydup
仅触发一次。在keydown
/keydup
事件期间,可能添加了多个字符。对于按键(例如“a”键),在文本输入中附加“a”之前触发keydown
事件。您可以检测事件类型,以及.keyCode
(或.which
)事件属性是否是可打印范围内的键,并尝试预测.val()
在keyup
事件后可能返回的内容,但这是一个坏主意
this.$input.bind('keydown keyup', function(e) {
var val = this.$input.val();
if (e.type == 'keydown') {
// Here is where you would check to see if e.keyCode was a printable
// character. Note that key codes differ from ASCII codes. For
// example, the "a" key will return key code 65, which is actually
// the ASCII code for "A", so you would need to check for the presence
// of shift keys and such. Again, this is a bad idea :)
val += String.fromCharCode(e.keyCode);
}
if (val == …) { … }
}
。使用前面提到的HTML5
oninput
和onpropertychange
作为IE.Brilliant的后备方案。好极了其他令人高兴的词。由于输入框的文本会立即对键盘输入做出反应,我的小部件的延迟响应非常突出。哦,这是一个HTML5 DOM事件。马修:那我的工作就不会那么轻松了。@Matthew:因为这是在把一个方形的钉子塞进一个圆孔。根据定义,keydown
事件发生在按键上的任何其他事件之前。这意味着,任何控制文本翻译的关键都还没有机会运行。因此,它基本上是以一种不那么直观和全面的方式重新实现翻译逻辑。换句话说,你将重新发明一个劣质的轮子。