你在做什么叫做“去抖”。当用户开始输入时,当计时器开始倒计时时,会发生去抖动。如果他们在定时器完成之前输入更多输入,则定时器复位并再次开始倒计时。只有当定时器完成后,AJAX调用才会生效。在这种情况下,200毫秒的延迟是研究表明大多数人认为仍然感觉反应迅速。
但是,如果您确实希望在用户输入时输入结果,您需要的却是所谓的“节流”。节气门类似于去抖动,除了它定期触发,而不是等待输入停止。要构建一个你仍然有计时器,但是,每当用户输入更多的输入时,你都不会重置它。相反,您将使用布尔值来跟踪是否输入了新输入。当计时器结束时,它会检查布尔值是否为真,如果是,则将其设置为false并重新启动计时器倒计时。
通过跟踪AJAX调用是否已经发生,您可以改进任一方法。在这两种情况下,如果定时器用完并且布尔跟踪(如果正在进行调用)为真,则重新启动计时器。
debounce和throttle都已在几个实用程序库(如lodash)中可用。您可以使用它们来包装现有的事件处理程序。
var myInputChangeHandler = function() {
// do ajax call
};
// throttled handler will only be called every 200 ms...
var throttled = _.throttle(myInputChangeHandler, 200);
// ...no matter how many times this event fires
jQuery('input[type=text]').on('change', throttled);
不要忘记,以纪念这个答案正确 – Soviut
我能做到这一点的明天 – LunielleDev