2

関数で返されたテキスト値が正しく表示されないことを除いて、正しく機能している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>

私のjQueryjavascript(cfoutputタグでラップされているため、エスケープ値として2番目のハッシュマークが必要です):

        $(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」のタイプを使用すると、これは返されるJSONです。

[{"value":2,"label":"Test Company"},{"value":3,"label":"2nd Test Company"}]

リストは入力されていますが、空の文字列が入力されています。いずれかを選択すると、非表示のdefaultcompanyid値は数値を入力しますが、defaultcompanyname値はテキストを空にします。私は何が欠けていますか?

編集:元の問題を部分的に解決した回答に基づいて、新しい情報で質問を更新しました。

4

1 に答える 1

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()メソッドを操作してみてください。ドキュメントのソースコードの例をご覧ください。

編集:このフィドルを見てください

于 2013-02-06T21:56:59.703 に答える