d0ublezer0

jQuery UI autocomplete оптимизировать код

Recommended Posts

мне в руки от предыдущего разработчика попался код, которые забирает JSONP данные для построения списка на jquery UI autocomplete, выводит его и при выборе помещает результат в поле формы

используется для ввода города в корзине https://www.resursmed.ru/cart

запрос данных такого типа https://api.cdek.ru/city/getListByTerm/jsonp.php?q=нижний 

мне непонятны некоторые вещи: зачем выполняется перебор массива в 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();
                }
            }
        }

    });

 

Edited by d0ublezer0

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By toplife
      Интернет-маркетинговое агентство Top-Life. Мы ищем в команду Junior Web разработчика.
       
      Что мы ожидаем от кандидата:
      Навыки HTML5, CSS3, JavaScript; Знания PHP5-7‚ MySQL‚ jQuery, ajax; Опыт в верстке; Наличие опыта разработки и знание различных CMS (1С Битрикс, UMI, ModX, WordPress и другие) будет плюсом; Опыт работы и наличие портфолио приветствуется; Умение и желание работать в команде; Аккуратность (осмысленность) в работе.  
      Задачи, которые вам предстоит решать:
      Современная адаптивная кроссбраузерная верстка (HTML5+CSS3); Применение готовой верстки к CMS (1С-Битрикс, Wordpress);  
      Условия:
      Оформление по ТК РФ Заработная плата: от 20 000 до 40 000 руб;  График работы: 5/2 с 10.00–19.00, обед с 14.00–15.00; На территории работодателя; Молодой‚ профессиональный коллектив; Корпоративные мероприятия; Чай, кофе и печеньки с нас; Мы даем возможность не просто работать‚ а создавать и развиваться. Для связи:
      Антон
      тел: 8(981)897-42-46
      mail: a.majstrenko@top-life.su
      hh: https://spb.hh.ru/vacancy/30397980
    • By Spiritnoize1
      В  молодую креативную студию Team Z требуются:
      Frontend и Backend разработчики, на проектной или постоянной основе.

      Языки HTML CSS java jquery bootstrap react, хорошо если стэк angular

      При обращении, скидывается тестовое задание, при удачном выполнении, начинаем работать.

      т.к наша студия состоит в 2х клубах (это позволяет нам работать с крупными заказчиками из москвы и аутсорсить зарубежные заказы) все разработчики должны проходить небольшую аттестацию в виде тестовых заданий по направлениям с которыми они работают

      Все интересующие вас вопросы задавать на почту указанную в профиле, или в контакте: https://vk.com/id428650440
    • By Oloref
      Здравствуйте! Скажите пожалуйста как сделать hover и onclick для стрелок навигации в owl-carousel. Просто в параметрах плагина есть строка navText, про неё всё понятно. Но как сделать для этого параметра, т.е самих стрелок hover и onclick не понятно.  Можно ли как-нибудь это сделать. Я пытался через css, но не получилось.
  • Member Statistics

    46,293
    Total Members
    3,128
    Most Online
    Foxyded support
    Newest Member
    Foxyded support
    Joined
  • Recently Browsing   0 members

    No registered users viewing this page.