我正在为一个网站构建一个自定义搜索引擎,搜索是通过 AJAX 在 keyup 事件上完成的,所以当你开始输入时(如果你输入了两个以上的字符并且在字符串被修剪之后),对服务器的 AJAX 调用就完成了.
它工作得很好,但是我正在考虑一种情况,当您开始连续输入四个或任意数量的字符时,您输入的字符就会有多少个调用。好吧,例如,如果您键入 10 个字符,那将会发出很多请求。
在这种情况下,我在想是否有一种简单的方法可以停止发生这种行为之前开始的所有事情,并在您完成疯狂输入后继续搜索(:
我正在为一个网站构建一个自定义搜索引擎,搜索是通过 AJAX 在 keyup 事件上完成的,所以当你开始输入时(如果你输入了两个以上的字符并且在字符串被修剪之后),对服务器的 AJAX 调用就完成了.
它工作得很好,但是我正在考虑一种情况,当您开始连续输入四个或任意数量的字符时,您输入的字符就会有多少个调用。好吧,例如,如果您键入 10 个字符,那将会发出很多请求。
在这种情况下,我在想是否有一种简单的方法可以停止发生这种行为之前开始的所有事情,并在您完成疯狂输入后继续搜索(:
只需通过 Ajax 延迟调用,直到他们在 0.5 到 1 秒内没有输入任何内容。然后你可以简单地取消一个 setTimeout 等。
--@Tejs
您可以为此使用下划线去抖动。让 key up 事件调用 undersocre 的函数而不是你的函数,这样下划线就会知道何时调用你的函数。
如前所述,这里有一个示例,它在某个指定的延迟后执行一个函数,如果在延迟未超过时再次调用该方法,则清除原始超时并重新设置一个新超时。
这是一个干净的解决方案,它不需要 jQuery,只需更改用法即可。