我有一个正常运行的jQuery自动完成功能,除非它不正确地显示函数中返回的文本值。我的后端是ColdFusion。
后端功能(在CFC中):
<cffunction name="companyNameList" access="remote" output="false" hint="I return a list of companies with IDs" returnformat="JSON">
<cfargument name="searchterm" required="false" default="" />
<cfset var returnArray = arrayNew(1) />
<cfquery name="companyNameList" datasource="#request.dsn#">
SELECT companyID, companyName
FROM tbl_companies
WHERE companyName LIKE <cfqueryparam cfsqltype="cf_sql_varchar" value="%#arguments.searchterm#%" />
</cfquery>
<cfloop query="companyNameList">
<cfset companyStruct = structNew() />
<cfset companyStruct['value'] = companyID />
<cfset companyStruct['label'] = companyName />
<cfset arrayAppend(returnArray,companyStruct) />
</cfloop>
<cfreturn returnArray />
</cffunction>
我的jQuery javascript(它包含在cfoutput标签中,需要第二个哈希标记作为转义值):
$(function() {
$("##defaultcompanyname").autocomplete({
source: function(request, response){
$.ajax({
url: "secure/cfc/ajax.cfc?method=companyNameList",
dataType: "json",
data: {
searchterm: request.term
},
success: function(data){
response(data);
}
})
},
minLength: 3,
select: function(event, ui) {
$('##defaultcompanyid').val(ui.item.value);
$('##defaultcompanyname').val(ui.item.label);
}
});
});
相关表格块:
<p class="ui-widget">
<label for="defaultcompanyname">Default Company Association</label>
<cfinput type="text" size="30em;" name="defaultcompanyname" id="defaultcompanyname" value="" />
<cfinput type="hidden" name="defaultcompanyid" id="defaultcompanyid" value="0" />
</p>
当我使用'test'中的type作为我的测试值时,这是返回的JSON:
[{"value":2,"label":"Test Company"},{"value":3,"label":"2nd Test Company"}]
列表正在填充,但它填充空字符串。如果我选择一个,隐藏的defaultcompanyid值会填充一个数字,但defaultcompanyname值会清空我的文本。我错过了什么?
编辑:根据部分解决原始问题的回复更新了包含新信息的问题。
答案 0 :(得分:1)
最简单的解决方案可能是调整您的JSON。 jQueryUI期望数据像
一样[
{
"id": 2,
"label": "Test Company"
},
{
"id": 3,
"label": "2nd Test Company"
}
]
然后更改您的select()
方法:
select: function (event, ui) {
$('#defaultcompanyid').val(ui.item.id);
$('#defaultcompanyname').val(ui.item.label);
}
如果您无法更改JSON,请尝试操纵_renderItem()
方法,查看example source code in the docs。
编辑:看一下这个fiddle