Автозаполнение текстовых полей с помощью jQuery.UI - PullRequest
1 голос
/ 19 июля 2011


Я пробую библиотеку jQuery.UI. С этой библиотекой очень легко разрабатывать веб-интерфейсы. Я имел в виду документацию и демонстрацию использования auto complete с «источником данных JSONP Remote» Здесь

это полный код для передачи данных из удаленного источника в текстовое поле автозаполнения.

$(function() {
        function log( message ) {
            $( "<div/>" ).text( message ).prependTo( "#log" );
            $( "#log" ).attr( "scrollTop", 0 );
        }

        $( "#city" ).autocomplete({
            source: function( request, response ) {
                $.ajax({
                    url: "http://ws.geonames.org/searchJSON",
                    dataType: "jsonp",
                    data: {
                        featureClass: "P",
                        style: "full",
                        maxRows: 12,
                        name_startsWith: request.term
                    },
                    success: function( data ) {
                        response( $.map( data.geonames, function( item ) {
                            return {
                                label: item.name + (item.adminName1 ? ", " + item.adminName1 : "") + ", " + item.countryName,
                                value: item.name
                            }
                        }));
                    }
                });
            },
            minLength: 2,
            select: function( event, ui ) {
                log( ui.item ?
                    "Selected: " + ui.item.label :
                    "Nothing selected, input was " + this.value);
            },
            open: function() {
                $( this ).removeClass( "ui-corner-all" ).addClass( "ui-corner-top" );
            },
            close: function() {
                $( this ).removeClass( "ui-corner-top" ).addClass( "ui-corner-all" );
            }
        });
    });

Я хочу знать, какова точная функциональность следующего сегмента кода.

success: function( data ) { 
    response( $.map( data.geonames, function( item ) {
       return {
        label: item.name + (item.adminName1 ? ", " + item.adminName1 : "") + ", " + item.countryName,
        value: item.name
        }
    }));
}

Специально для

$. Map (data.geonames, function (item)

Заранее спасибо

1 Ответ

2 голосов
/ 19 июля 2011

Это интересный фрагмент кода.

Виджет ожидает массив объектов, каждый из которых имеет свойства label и / или value.Этот код пытается создать массив, который выглядит следующим образом.

Таким образом, вызов $.map (довольно полезная служебная функция) преобразует массив найденных объектов.из вызова JSONP в массив объектов в формате, описанном выше.

Один из способов прочитать это:

$.map( data.geonames, function( item ) {
       return {
        label: item.name + (item.adminName1 ? ", " + item.adminName1 : "") + ", " + item.countryName,
        value: item.name
}

будет: "Создать новый массив, взяв каждыйэлемент массива data.geonames и преобразование элемента с использованием заданной функции "

В этом случае функция просто создает объект со свойствами label и value, так что он будетработать с виджетом автозаполнения.

Затем этот новый массив немедленно передается в качестве аргумента функции response.

...