jQuery UI autocomplete можно ли оптимизировать код?

d0ublezer0

Мой дом здесь!
Регистрация
21 Май 2009
Сообщения
367
Реакции
201
мне в руки от предыдущего разработчика попался код, которые забирает JSONP данные для построения списка на jquery UI autocomplete, выводит его и при выборе помещает результат в поле формы

используется для ввода города в корзине Для просмотра ссылки Войди или Зарегистрируйся

запрос данных такого типа Для просмотра ссылки Войди или Зарегистрируйся

мне непонятны некоторые вещи: зачем выполняется перебор массива в success и select?

и, можно ли сделать выбор первого значения списка при потере фокуса автозаполнялки, если в ней не ткнули в значение?

change и blur в конце (на событие select) сделаны видимо чтобы запустить дальнейшую обработку onblur=javascript:Onepage.op_runSS(this);
Код:
var $j = jQuery.noConflict();
$j("#city_field").autocomplete({
        noSuggestionNotice: "Населённые пункты не найдены",
        autoSelectFirst: true,
        autoFocus: true,
        minLength: 2,
        source: function (request, response) {
            $j.ajax({
                url: "https://api.cdek.ru/city/getListByTerm/jsonp.php",
                dataType: "jsonp",
                data: {
                    q: function () {
                        return $j("#city_field").val()
                    }
                },
                success: function (data) {
                    response($j.map(data.geonames, function (item) {
                        Object.getOwnPropertyNames(data.geonames).forEach(function (val, idx, array) {
                            Object.getOwnPropertyNames(data.geonames[val]).forEach(function (val2, idx2, array2) {
                            });
                        });

                        try {
                            if (item.postCodeArray[0] !== 0 && item.postCodeArray[0] !== 'undefined' && item.postCodeArray[0] !== null) {
                                found_zip = item.postCodeArray[0];
                                zip_array[zip_line] = [];
                                zip_array[zip_line][0] = zip_line;
                                zip_array[zip_line][1] = item.id;
                                zip_array[zip_line][2] = item.postCodeArray[0];
                                zip_line++;
                            }

                        } catch (err) {
                            // обработка ошибки
                        }

                        return {
                            label: item.name,
                            value: item.name,
                            id: item.id
                        }
                    }));

                }
            });
        },
        select: function (event, ui) {
            $j('#receiverCityId').val(ui.item.id);
          
            //пробегаемся по массиву, чтобы вывести индекс в поле
            for (var i = 0; i < zip_array.length; i++) {
                if (ui.item.id == zip_array[i][1]) {
                    $j("#customer_note_field").empty();
                    $j('#address_2_field').val(zip_array[i][1]).focus().change().blur();
                    $j('#zip_field').val(zip_array[i][2]).focus().change().blur();
                }
            }
        }

    });
 
Назад
Сверху