Nano Hash - криптовалюты, майнинг, программирование

Проблема OnSelect модуля поиска Semantic-UI

Я создал поле ввода автозаполнения (адреса поиска) с помощью модуля поиска Semantic-UI. Само автозаполнение работает нормально, но я испытываю странное поведение при попытке настроить действия с помощью метода OnSelect.

$('#address_search')
              .search({
                apiSettings: {
                  url: 'ajax_search_address/{query}'
                },
                minCharacters: 4,
                maxResults: 5,
                showNoResults: true,
                type: 'category',
                searchDelay: 0,
                duration: 200,
                fields: {
                    categories: 'results',
                    categoryName: 'state',
                    categoryResults: 'results',
                    description:'city',
                },
                onSearchQuery: function(query){
                    $('#address_search').addClass("loading");
                },
                onResults: function (response){
                    $('#address_search').removeClass("loading");
                },
                onSelect: function(result, response) {
                    address = result.title + ', ' + result.city + ' ' + result.region;
                    $('#address_search').search('set value', address);
                    //$('#address_search').find('input').val(address);
                    $('#address_search').search('hide results');
                    $('#address_search').removeClass("loading");

                    return false;
                },
              });

Причина, по которой я использую собственный метод OnSelect, заключается в том, чтобы отобразить результат адреса определенным образом (отличным от того, как он возвращается). Проблема, с которой я сталкиваюсь, заключается в том, что кажется, что когда я выбираю адрес из возвращаемого списка, он правильно вызывает «установить значение», но затем, похоже, генерирует новый вызов ajax с новым значением, следовательно, представляет новый раскрывающийся список с этим адресом снова (само собой). Как показано в приведенном выше вызове, я попытался вручную присвоить значение полю ввода с помощью jQuery (вместо вызова «установить значение»), но снова поведение такое же.

Я попытался использовать метод «отменить запрос» сразу после того, как попытался отменить этот последний вызов ajax при выборе значения, но, похоже, это не имеет никакого эффекта (и я бы предпочел избежать ненужного вызова).

Кто-нибудь знает, как предотвратить это? Метод onSelect по умолчанию (когда установлено значение «return true» не показывает такого поведения, поэтому я предполагаю, что есть способ предотвратить это, но я не смог найти его на основе документации или других потоков по этому вопросу.

Спасибо!!

25.02.2019

Ответы:


1

Метод onSelect по умолчанию (если установлено значение «return true», не показывает это поведение

Просто установка return false на return true предотвращает выполнение другого вызова.

26.02.2019
  • Спасибо за ответ. Проблема в том, что return true запускает действие по умолчанию (из семантического документа: функция должна возвращать false, чтобы предотвратить действие по умолчанию (закрытие результатов поиска и выбор значения)). В этом случае я пытаюсь отобразить значение в определенном формате (согласно переменной address). Если я использую return true, то он показывает форматирование по умолчанию после получения значения, перезаписывая формат, который я определил. Любая идея о том, как это сделать? 27.02.2019
  • Вы пытаетесь использовать setTimeout, а затем возвращаете true, чтобы установить таймер на 10 миллисекунд, а затем меняете значение раскрывающегося списка внутри тайм-аута. 27.02.2019
  • Кажется, дело пошло! Не уверен, что это супер чистое, но пока лучшее решение! Спасибо за вашу помощь 28.02.2019

  • 2

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

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

    Ответ Джошуа привел меня по правильному пути, и именно это сработало для меня. return false работал, чтобы предотвратить что-либо еще, и добавление 'hide results' было единственным дополнительным поведением, которое я хотел:

    onSelect: function (result, response) {
        doSomethingWithResult(result)
        $(".ui.search").search('hide results')
        return false
    }
    
    21.11.2019

    3

    Вот пример для нескольких полей ввода вместе с использованием setTimeout для их заполнения другим полем:

        $(".ui.input.search").search({
        type: "standard",
        minCharacters: 2,
        onSelect: function onSelect(result, response) {
            console.log(result);
            setTimeout(()=>{
                $(this).search('set value', result.address);
            },10);
        },
    

    Как видите, использование $(this) вместе со стрелочной функцией ()=>{ позволяет ей заполнить соответствующее поле ввода, которое было нажато, и, поскольку значение true возвращается автоматически, все, что необходимо, — это setTimeout.

    11.04.2021
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..