如何判断是否从jQueryUIAutoComplete中选择了建议
我有一个连接到jQueryUIAutoComplete的文本框。当用户在框中键入时,我的搜索通过ajax调用运行并返回建议。似乎有三件事可以发生:如何判断是否从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提供了一个
您可以通过
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");
}
}
});