使用jQuery回调自动完成(标签/值对)

我正在尝试实现自动完成jQuery,但我不理解jQuery UI提供的自动完成function。

它使用回调函数并将响应作为标签/值对进行获取。 我有一些示例代码,我试图传回任意标签/值对并显示该选项,但它不起作用。 如果有人可以帮我解决这个问题,或者向我展示一个简单的程序,那就太棒了。

http://jsfiddle.net/kB25J/

HTML:

  Please enter your country name   ​ 

JavaScript的:

 $("#book").autocomplete({ source: function(request, response) { alert(request.term); response(function() { return { label: "hi", value: "bye" } }); alert(reponse); } }); 

谢谢

发送响应时,传递数组而不是函数。

 $(function() { $("#book").autocomplete({ source: function(request, response) { var data = [{ label: "hi", value: "bye" }]; response(data); }, select: function( event, ui ) { $( "#book" ).val( ui.item.label); //ui.item is your object from the array return false; } }); });​ 

您应该在源代码中返回一个数组,即使在这种情况下只有1个匹配’hi’/’bye’

如jqueryui.com上的这个例子所示

 response( $.map( data.geonames, function( item ) { return { label: item.name + (item.adminName1 ? ", " + item.adminName1 : "") + ", " + item.countryName, value: item.name } })); 

它使用远程响应上的映射返回标签/值的键/值对数组。

如果您的来源只是国家/地区列表,则可以使用字符串数组作为来源。

 var countries = ["USA", "Canada", "Mexico", ...] $('input').autocomplete({ source : countries }); 

如果您正在使用远程源:

 $('input').autocomplete({ source : function (request, response) { $.ajax({ url: "url_to_get_countries", dataType: "json", success: function( data ) { response( $.map( data.countries, function( item ) { return { label: item.country_name, value: item.country_id } })); } }); } }); 

@LakshmikanthanVijayaraghavan

正如您在自动完成指南中所看到的,有三种方法可以使用jquery插件实现自动完成。

  • 提供包含值列表的数组
  • 提供对象值/标签对象的数组
  • 提供一个url来获取对象数组

前两个选项用于固定的值列表。 如果要以dinamically方式填充自动完成列表,则必须实现最后一个。

为此,您必须指定一个url来获取objects数组。 如果要保持标签和键隐藏,则需要创建隐藏的输入类型并设置其值。

例如

 $( "#book" ).autocomplete({ source: "getValues.htm", select: function(event, ui) { $( "#book" ).val(ui.item.label); $( "#book_hidden" ).val(ui.item.value); return false; } }); 

getValues.html必须返回标签/值对的数组。

希望这可以帮助

Ajax,Key Value对,Min Length触发搜索。 简单代码

  

更多

https://stackoverflow.com/a/40883309/5237614

@Edathadan您的回答是最好的解决方案。 但是,我认为我们需要保留原始请求,因此您应该修改为: