4

私の現在のコードは次のようになります。

$(document).ready(function () {
    $('#txtSearchForTrainingFacility').autocomplete({
        select: function (event, ui) {
                    searchCallback(event, ui);
                },      //  select
        source: function (request, response) {
            $.ajax({
                url: 'http://localhost:49795/Ajax/Search/' + $('#txtSearchForTrainingFacility').val(),
                dataType: 'json',
                data: {},
                success: function (data) {
                    response( $.map( data, function( item ) {
                        return {
                            label: item.Name,
                            value: item.Value,
                            id: item.ID
                        }   //  return object
                    }))     //  response
                }           //  success
            })              //  ajax
        }                   //  source function
    });                     //  autocomplete
});                         //  document.ready

イベント関数では、 、、およびプロパティajax.successを持つオブジェクトを返すようにマッピングしていますが、メソッドのパラメーターには と のみが含まれていることがわかります。labelvalueidautocomplete.selectui.itemlabelvalue

私は何を間違っていますか?idプロパティをautocomplete.selectui.itemオブジェクトに表示するにはどうすればよいですか?

Nameajax 呼び出しの結果は json 配列であり、各要素はプロパティ、Value、およびを含むオブジェクトですID

注:[{id: 1, label: 'bob', value: 'creep'}, {id: 2, label: 'joe', value: 'friend'}] ajax 呼び出しを固定配列に 置き換えるとid、select イベントでプロパティが問題なく通過するように見えます。

4

4 に答える 4

2

jQuery UI 1.8.20 sourceによると、item オブジェクトは<li>using jQueryに直接格納されdata()ます。jQuery UI で唯一、コールバックとプライベート関数responseオブジェクトのストレージの間でオブジェクトを変更できる場所。渡すオブジェクトが文字列の場合はラベルと値のみを明示的に保持しますが、それ以外の場合は関数でさえオブジェクトをそのまま保持する必要があります。data_normalize_normalize

これと、静的配列を渡すことで問題が解決するという事実から、問題は投稿した JavaScript スニペットではなく、サーバーからの JSON にあると思われます。コードは、IDASP.NET サーバーの既定のフィールドを想定しています。そのフィールド名がまだデフォルトとして使用されていることを確認するために、再確認する価値があるかもしれません。

于 2013-10-19T06:22:50.643 に答える