绑定事件期间检索的输入值不正确

时间:2013-05-29 15:13:54

标签: javascript jquery javascript-events

我正在按照以下方式键入文本框的输入执行一些过滤操作。

$("#search").on('change keyup', function () {
    var search = $.trim($(this).val());
    ...perform search based operation
});

我遇到的问题是,当快速输入输入时,使用.val()检索的最新值并不总是最新的。例如,将搜索变量的值记录到控制台并搜索“jquery”时;这是快速输入时记录的内容:

LOG: j 
LOG: j 
LOG: j 
LOG: j 
LOG: j 
LOG: j

减慢击键次数会得到正确的结果:

LOG: j 
LOG: jq 
LOG: jqu 
LOG: jque 
LOG: jquer 
LOG: jquery

当我从.on删除基于搜索的操作时,只需记录按键,所有内容都会正确记录。我相信这可能是某种类型的计时问题,但我不确定这是否是我不知道的已知事物。我正在针对IE9 / jQuery 1.9.1运行此操作。可能是错误值的原因是什么?

更新: 小提琴:http://jsfiddle.net/bPuJ5/15/

enter image description here

1 个答案:

答案 0 :(得分:1)

我建议使用keydown代替keyup

Fiddle

释放密钥时的键盘触发器。看起来当您快速键入或按住某个键时,在没有按下任何键之前,键盘事件不会触发。

如果您不想在每次按键时触发该功能,您可以实施一个短暂的延迟或自上次按键检查后经过的时间,以查看是否执行搜索。