jQuery UI Autocomplete在列表中显示结果,但在选择时,打印值而不是标签

我在使自动完成工作时遇到很多问题。 首先,我的validation不兼容,因为我使用的是jQuery Validation和jQuery 1.5,并打破了Autocomplete小部件上的AJAXfunction。 这已经解决了,现在我的PHP控制器返回一个带有标签/值的JSON结果。 当然,label是我想要显示的名称,值是我需要提交的值。

我正在使用PHP的示例JSON输出,仅用于测试而不是立即搜索。 这是我在发出AJAX请求时发回的内容:

[{"label":"Client example","value":1},{"label":"Lorem Ipsum","value":2},{"label":"Microsoft","value":3}] 

并使用下一个代码我认为将直接显示标签并提交id。 当我开始输入时,我在列表客户端示例,Lorem Ipsum和Microsoft中看到了我想要的结果,但是当我选择它们时,列表关闭,输入显示值而不是标签。

 $("#clientid").autocomplete({ source: function(request, response) { $("#ajax-loader").fadeIn('normal'); $.ajax({ url: BASE_URL + 'projects/ajax/get_clients', data: request, dataType: "json", type: "POST", success: function(data) { response(data); } }); $("#ajax-loader").fadeOut("normal"); }, minLength: 2 }); 

我还尝试了一个代码@ 3nigma在我看到为什么自动完成失败时建议我:

 success: function(data) { response($.map( data, function( item ) { return { label: item.label, value: item.value } })); } 

没别的了。 看一下jQuery UI网站和谷歌的例子,似乎选择必须做这件事所以我试过:

 select: function(event, ui) { $("#clientid").val(ui.item.label); } 

但是也不行。我在上看到了值。

我不知道我还能尝试什么。 我怎么能解决这个问题?

先感谢您!

单个只能存储一个值,没有任何标签。

  

自动完成只是设置输入的value属性,这与您在输入值中键入的属性完全相同。 不能直接在输入中显示与其值不同的标签。

您需要调整数据源以返回与label相同的值

 [{"label":"Client example","value":"Client example"}... 

但你会失去你的价值。 处理提交的表单时,您可以使用标签检索值,假设标签是唯一的。

我能够在select:和focus:functions中使用另外两行代码完成此操作。

在你的情况下添加这些

  select: function(event, ui) { event.preventDefault(); $("#clientid").val(ui.item.label); }, focus: function(event, ui) { event.preventDefault(); $("#clientid").val(ui.item.label); }