Javascript 在下拉列表中选择数据列表项后,如何防止额外的.keyup事件?

Javascript 在下拉列表中选择数据列表项后,如何防止额外的.keyup事件?,javascript,jquery,html,Javascript,Jquery,Html,当使用AJAX自动填充html数据列表时,为什么选择数据列表项会触发另一个事件?我使用jQueryKeyUp来自动建议查询,在我选择一个列表项之后,字符串被正确地放置在输入框中,但随后它再次触发keyup事件,使datalist下拉列表保持打开状态,覆盖按钮 $(function () { $('#searchTerm').keyup(function (e) { var search = $(this).val(); $.post(host/search

当使用AJAX自动填充html数据列表时,为什么选择数据列表项会触发另一个事件?我使用jQueryKeyUp来自动建议查询,在我选择一个列表项之后,字符串被正确地放置在输入框中,但随后它再次触发keyup事件,使datalist下拉列表保持打开状态,覆盖按钮

$(function () {
    $('#searchTerm').keyup(function (e) {
        var search = $(this).val();
        $.post(host/search, {search: search}, function (data) {
            $('#list').html(data);
        });
    });
});
我希望单击一个datalist项以使用所选字符串填充输入字段,然后datalist消失,但它会触发一个额外的.keyup事件并持续

自动建议功能非常常见,如果我忽略了任何明显的内容,我深表歉意。

$function{ var keyupFired=false; $'text'.keyupFunction{ 如果!钥匙被点燃了{ 控制台。logYes。。。; keyupFired=true; setTimeoutfunction{ 警报OK!!!; keyupFired=false; }, 3000; }否则{ 控制台logNo。。。; e、 防止违约; } }; };
你的答案并没有去掉下拉列表。工作原理与以前完全相同。也不确定标志应该做什么,因为它永远不会停止AJAX调用。。。我在我的功能中尝试过这一点。用这个答案添加代码片段,所以我相信这是行不通的。好吧,我尝试了你的新实现,但仍然行不通。如果在AJAX调用之后将标志更改为true而不是false,那么它将正常工作,但仅当我单击初始列表项之一时。因此,如果键入一个字母并从初始数据列表中选择,它的行为将非常完美。但是,由于标志为true,因此不会注册任何其他按键。当它为false时,它将始终进行AJAX调用。问题在于,当选择数据列表项时,它不应进行额外调用。这些标志无法防止这种情况发生,因为选择数据列表项会注册一个keyup事件。@jmoney您看到第一个示例了吗?在这个示例中,我演示了下一个请求只会在我们需要时发生。&我不知道你想要什么。。。因此,我努力根据你的问题给出我最好的答案&我做到了。非常感谢。我正在寻找一种解决方案,它基于向datalist注册一个点击事件或防止输入更改触发keyup。这似乎是最简单的方法。当我有时间的时候,我会检查查询字符串是否已经发送,然后取消它。我希望我能阻止输入框更改注册keyup事件。