Как вернуть результат автозаполнения jquery в отдельный div?

Я нашел здесь, чтобы перезаписать одно из событий автозаполнения. Но может ли кто-нибудь привести мне пример, как сделать то же самое?


person LA_    schedule 29.10.2011    source источник


Ответы (5)


Параметр appendTo действительно работает так, как ожидалось, и если вы проверите DOM, элемент результатов <ul> будет прикреплен к элементу. Однако из-за абсолютного позиционирования, созданного jQueryUI, список по-прежнему отображается непосредственно под <input>.

Тем не менее, вы можете переопределить внутренний _renderItem, чтобы напрямую добавлять результаты к совершенно другому элементу, например:

HTML

<input id="autocomplete"/>
<div class="test">Output goes here:<br/><ul></ul></div>

JavaScript

$('input').autocomplete({
    search: function(event, ui) {
        $('.test ul').empty();
    },
    source: ["something", "something-else"]
}).data('autocomplete')._renderItem = function(ul, item) {

    return $('<li/>')
   .data('item.autocomplete', item)
   .append(item.value)
   .appendTo($('.test ul'));
};

Я также создал демо, чтобы продемонстрировать это. Обратите внимание, что последняя библиотека jQuery не подвергалась полному тестированию jQueryUI, поэтому я использую предыдущую версию, которая позволяет мне включать jQueryUI непосредственно с параметрами jsFiddle.

person andyb    schedule 30.10.2011
comment
Спасибо, похоже, это то, что я ищу - буду тестировать еще ;) - person LA_; 30.10.2011
comment
Кажется, что обработчик SELECT, который обычно срабатывает при выборе опции автозаполнения, не работает с этой настройкой. Есть ли способ заставить его работать? - person Martin; 10.07.2012
comment
Правильный. Поскольку параметры были переданы другому элементу, ни одно из событий jQueryUI не будет запущено. Вам нужно будет дублировать события в вашем пользовательском элементе вывода, чтобы имитировать события автозаполнения jQueryUI, и это кажется неправильным. Вы можете принудительно перевести элемент jQueryUI в новую позицию, которая сохранит события, которые могут вам подойти. - person andyb; 10.07.2012
comment
Потрясающий! Это будет очень полезно для меня, так как я пытаюсь использовать веб-службу Geonames с jQuery Mobile. Спасибо!!!!!! - person Nicolaesse; 25.11.2012

Мне нужно было больше контроля над тем, куда помещать данные, поэтому я сделал следующее:

$("#input").autocomplete({
    minLength: 3,
    source: [
        "ActionScript",
        "AppleScript",
        "Asp"
    ],
    response: function(event, ui) {
        console.log(ui.content);
        // put the content somewhere
    },
    open: function(event, ui) {
        // close the widget
        $(this).autocomplete('close');
    }
});
person hle    schedule 09.07.2015

Ответ hle сработал для меня отлично и дает вам больше гибкости! Вот мой тестовый код, который был изменен его ответом:

$("#autocomplete").autocomplete({
    minLength: 3,
    source: ["something", "something-else"],
    response: function(event, ui) 
    {
        console.log(ui.content);
        // put the content somewhere
    },
    open: function(event, ui) 
    {
        // close the widget
        $(this).autocomplete('close');
    }
});
person Qtpounder    schedule 09.06.2017

Хотя этот вопрос довольно старый, но у меня есть довольно простое решение. Никакого хака, ничего просто в jQuery:

Вместо функции ответа автозаполнения просто добавьте данные ответа в div в случае успеха.

    $(document).ready(function () {
    $("#book-code-search").autocomplete({
      minLength: 2,
      delay: 500,
      source: function (request, response) {
       $.ajax( {
        url: "server side path that returns json data",
        data: { searchText: request.term, param2 : $("#type").val()},
        type: "POST",
        dataType: "json",
        success: function( data ) {
          $("#data-success").html(data.returnedData); //returnedData is json data return from server side response
          /* response($.map(data, function (item) {
               return {
              label: item.FullDesc,
              value: item.FullDesc                      
             }
          })) */
        }
      });
     }
    });
   });  
<link href="https://code.jquery.com/ui/1.12.1/themes/smoothness/jquery-ui.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>

<div id='data-success' style='color: green;'></div>
<input type='text' placeholder='Enter Book Code' id='book-code-search' />
<input type='hidden' id='type' value='book'>

person Avnish alok    schedule 10.07.2020

person    schedule
comment
Хм, у меня как-то не работает - $( "#search" ).autocomplete({ appendTo: ".test", source: "/search", minLength: 2}); Что тут может быть не так? - person LA_; 30.10.2011
comment
у вас есть div с class="test"? - person samura; 30.10.2011
comment
Конечно. Я пробовал это здесь - jsfiddle.net/Gn2dX, тоже не работает ((. - person LA_; 30.10.2011
comment
autocomplete является частью jquery-ui. Попробуйте загрузить этот файл после jquery. Ваш пример: jsfiddle.net/Gn2dX/2 jquery-ui: jqueryui.com/download - person samura; 30.10.2011
comment
jquery-ui точно работает. И он загружается после jquery ui в моем коде, так что это не помогает... - person LA_; 30.10.2011
comment
но этого не было в jsfiddle, который вы мне прислали. вы пробовали мой пример? jsfiddle.net/Gn2dX/2 - person samura; 30.10.2011
comment
Да, я тестирую ваш пример, и он у меня не работает (пробовал и с FF, и с Chrome). - person LA_; 30.10.2011
comment
В порядке. Это странно. Как только я пишу букву «s» в поле, это дает мне 2 слова. - person samura; 30.10.2011
comment
Но привязан ли результат к полю класса «тест»? Посмотрите, что происходит на моем ПК: habrastorage.org/storage1/ccc5cb70/c4860d67/ 3b37b2bb/ (я добавил несколько br). - person LA_; 30.10.2011
comment
Да, теперь это работает, но это не то, что я ищу - как только пользователь вводит что-то в поле поиска, я хочу отображать результаты в отдельном поле (например, поиск Google в реальном времени работает сейчас, но мне не нужно это раскрывающееся меню с варианты - мне нужны результаты поиска). - person LA_; 30.10.2011
comment
Мне нравится этот ответ в сочетании с решением _renderItem. Отлично работает для меня. спасибо - person kieste; 17.05.2014