如何判断是否从jQueryUIAutoComplete中选择了建议

如何判断是否从jQueryUIAutoComplete中选择了建议,jquery,jquery-ui,autocomplete,jquery-autocomplete,jquery-ui-autocomplete,Jquery,Jquery Ui,Autocomplete,Jquery Autocomplete,Jquery Ui Autocomplete,我有一个连接到jQueryUIAutoComplete的文本框。当用户在框中键入时,我的搜索通过ajax调用运行并返回建议。似乎有三件事可以发生: 自动完成提示选项,用户选择其中一个 自动完成提示选项,但用户选择不选择任何选项 自动完成无法提出建议-不匹配(因此建议列表不显示) 在处理上述所有场景时,我如何判断用户是否从自动完成中选择了一个选项 我已经研究过在搜索开始(match=false)和选择发生(match=true)时标记一个标志,但这似乎不是一种很好的方法。jQueryUI提供了一个

我有一个连接到jQueryUIAutoComplete的文本框。当用户在框中键入时,我的搜索通过ajax调用运行并返回建议。似乎有三件事可以发生:

  • 自动完成提示选项,用户选择其中一个
  • 自动完成提示选项,但用户选择不选择任何选项
  • 自动完成无法提出建议-不匹配(因此建议列表不显示)
  • 在处理上述所有场景时,我如何判断用户是否从自动完成中选择了一个选项

    我已经研究过在搜索开始(match=false)和选择发生(match=true)时标记一个标志,但这似乎不是一种很好的方法。

    jQueryUI提供了一个,您应该在自动完成选项中定义它(当您将自动完成应用于表单输入时)

    例如(来源于):


    您可以通过
    ui.item
    从事件处理程序内部访问所选项目。

    当用户选择一个选项时,将触发“选择”事件。你可以听它并设置一个标志

    (function() {
        var optionSelected = false;
        $( ".selector" ).autocomplete({
            select: function(event, ui) { optionSelected = true; }
        });
    })();
    

    您可以像points那样使用
    select
    事件,但我认为在这种情况下,使用
    change
    事件更方便:

    $("#auto").autocomplete({
        source: ['hi', 'bye', 'foo', 'bar'],
        change: function(event, ui) {
            if (ui.item) {
                $("span").text(ui.item.value);
            } else {
                $("span").text("user picked new value");
            }
        }
    });
    
    示例:


    change
    在字段模糊时激发,但与本机的
    change
    事件不同,您可以获得有关用户是否单击事件的信息(
    ui.item
    如果用户未单击建议,则为空)。

    您需要知道何时未选择选项吗?也就是说,当用户输入一个不在建议列表中的值时?是的,Andrew,因为当输入一个数据库中当前不存在的值时,我的页面需要执行一些不同的操作。如果您乐于等待字段模糊,然后才知道该项是否为新项,这是一个很好的答案。谢谢你的意见,安德鲁。@Andrew tat是我一直在寻找的东西,但是如果你能让我知道它会很好的话,就不用再问别的问题了。如果我想获得用户输入的不同值,而该值不是从自动完成下拉列表中选择的?我如何获得该值?@Gotham'sRecking:Try
    $(this).value()
    @AndrewWhitaker,这两个值不是一起给出的吗??我如何区分??在它们之间?@Gotham'srecking:如果它们选择一个值,
    ui.item
    将不会为
    null
    。如果到达
    else
    块中的代码,则调用
    $(this).val()
    将只获取输入中的值——您知道他们没有选择值,因为如果他们有
    ui.item
    将不会为空。这有用吗?谢谢,cellcortex。这基本上就是我在问题中概述的标志解决方案。这似乎不是一个真正整洁的方式来做我想做的事。感谢您澄清这一点。实际上,这是一种非常好/普通/优雅的方式,足以在JavaScript中完成任务。要做的重要事情是将事情封装在一个闭包中。
    $("#auto").autocomplete({
        source: ['hi', 'bye', 'foo', 'bar'],
        change: function(event, ui) {
            if (ui.item) {
                $("span").text(ui.item.value);
            } else {
                $("span").text("user picked new value");
            }
        }
    });