如何在后续事件同时调用同一个处理程序时停止执行当前事件处理程序线程?
问题描述:
- 我有用于过滤和排序选择下拉的内容的输入的文本。
- 过滤/选择功能
filterSort()
上调用keyup
上输入文本。
代码如何在后续事件同时调用同一个处理程序时停止执行当前事件处理程序线程?
$(inputTextField).keyup(function()
{
//lot of logic to filter the options of a select dropdown and sort them based on the text of inputTextField
});
问题
过滤/排序逻辑现在工作的罚款。但我意识到,当用户输入内容时,有多个线程在filterSort()
内执行代码。所以,我想停止keyup()
如果另一个keyup()
发生内部的代码执行,因为没有必要继续使用旧线程作为它的结果将被丢弃反正。从未遇到过这种情况。我该怎么做呢?
我还不知道这是在功能上造成任何问题,我想我得到最终的正确过滤+排序的结果。
答
的溶液将与setTimeout()延迟滤波操作和每次用户按下一个键时重置计时器。 jQuery的data()方法可用于跟踪计时器标识符:
$(inputTextField).keyup(function() {
var $this = $(this);
var timer = $this.data("timer");
if (timer) {
window.clearTimeout(timer);
}
$this.data("timer", window.setTimeout(function() {
// Lots of logic to filter and sort the options...
}, 250));
});
+0
看起来很大......非常感谢......现在尝试做。 –
您是否打算中断已触发的事件? –
是...当一个新的键入命令被触发时,停止执行已经触发的键入事件。请注意,后者的密码必须完全执行,除非另一个密码不会在稍后发生。 –
我认为这不可能,可能是更好的事件队列使用一次() –