是什么触发了“标签”?部分

What is triggering the "Tags" section of Stackoverflow?

本文关键字:部分 标签 是什么      更新时间:2023-09-26

找了好几个小时了。在https://stackoverflow.com/questions/ask如何"标签"部分使蓝框出现在下面?

我不认为他们正在使用keyup事件触发器,因为蓝框并没有在每次按键时更新。

您可以通过转到https://stackoverflow.com/questions/ask并输入:

来进行测试。

" aadfadasdfasdfasdfasdfasfasdfsaf "

在键入时,您将注意到在键入几秒钟后才会出现蓝色框" aadfadasdfasdfasdfsaf "。不是在。

他们可能在最后一个keyup事件后1秒调用setTimeoutclearTimeout来运行他们的代码。

这只是一个自动补全的例子。有许多方法可以做到这一点。

一种方法是在客户端存储要自动完成的单词列表。这是非常快的,不会有任何延迟(除非你编程一个)。

另一种方法是对服务器进行AJAX调用,并让它返回一个自动补全单词列表。SO就是这么做的。由于您不希望每次用户键入字母时都进行ajax调用,因此实现了延迟以节省带宽并提高性能。

如果你想在自己的网站上实现类似的功能,我建议你看看jQuery插件来实现这一点,因为有很多免费的插件。

编辑:正如你提到的,触发器很可能是一个keyup事件。然而,在使用setTimeout()显示可能的自动完成列表之前,触发器可能会等待一秒钟左右。
如果在延迟期间按了其他键以防止多个呼叫,则使用clearTimeout()

使用Firebug或其他web检查器检查源代码。你会看到一个名为full.js的文件。它被最小化了,但你可以使用各种在线工具扩展代码;我采用了一种非常懒惰的方法,将所有内容复制/粘贴到jsfiddle中的"javascript"框中,然后点击"tidy"。我相信有更好(和更快)的方法来做到这一点。

无论如何,在该文件中,有几个函数可能会引起您的兴趣:StackExchange.tagPreferences及其子函数initTagRendererStackExchange.inlineEditing。我认为最后一个函数是导致您所指的特定延迟的函数,但是很难判断。