jQuery自动完成不显示文本值但填充元素

时间:2013-02-06 19:49:27

标签: jquery coldfusion

我有一个正常运行的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值会清空我的文本。我错过了什么?

编辑:根据部分解决原始问题的回复更新了包含新信息的问题。

1 个答案:

答案 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