我正在实现一个带有自动建议值的文本框,它在每个按下的键上从mysql数据库获取值。由于我在数据库中有大量的值,我的函数需要时间。而且每次调用函数都是按顺序运行的< / p>
假设 我按了一个键,触发事件并执行func启动。 然后我按下了B键,这又触发了一个事件,但现在我想要在运行第二个函数之前杀死早期的func
我怎样才能实现这个目标?
在搜索中我发现线程可以用来实现这个。但是我仍然无法通过线程实现。如果有人知道确切的程序?
答案 0 :(得分:1)
这是一个很好的(在我看来)求职面试问题和Nathan Leclaire wrote about it on his blog。
相关摘录:
如果我们使用window.setTimeout,我们可以将调用延迟200毫秒。 ...但是在用户输入速度很快,甚至只是正常速度的情况下,这对我们没有帮助。因此,如果用户继续输入,我们需要一种方法来中断超时。
...
所以,我知道当你调用
window.setTimeout
时,你会得到一个唯一引用超时的ID。如果需要,您可以使用它来取消超时!所以我们应该只在keypress函数闭包中存储超时ID,如果用户在超时函数触发之前再次触发keypress事件,我们只需取消它并设置一个新的!
最后,他分享了一些代码示例,我想这可以帮助您优化您的功能!
$(document).ready(function() {
$('input').keypress(function() {
if (this.timeoutId)
window.clearTimeout(this.timeoutId);
this.timeoutId = window.setTimeout(function () {
$.ajax({
// do some stuff
});
}, 200);
});
});