jQuery autocomplete: если пользователь записывает совпадение, функция обратного вызова не будет вызвана - PullRequest
2 голосов
/ 04 марта 2012

У меня есть функция автозаполнения jQuery для моего текстового поля, предлагающая языки программирования:

Java
C++
PHP

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

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

Есть ли практический способ решения такого рода проблемы?

Ответы [ 4 ]

2 голосов
/ 05 марта 2012

Если вы используете локальный источник данных, это довольно просто - просто посмотрите, находится ли запись пользователя внутри исходного массива:

$("#auto").autocomplete({
    source: availableTags,
    change: function(event, ui) {
        if (ui.item) {
            /* User selected an item. value is ui.item.value */
        } else {
            if ($.inArray(this.value, availableTags) >= 0) {
                /* User typed item in suggestion list. value is this.value. */
            } else {
                /* User typed something that wasn't in the suggestion list */
            }
        }
    }
});

Пример: http://jsfiddle.net/andrewwhitaker/PNqkB/

Вы также можете использовать плагин Скотта Гонсалеса autoSelect ( demo ). Преимущество использования плагина в том, что он должен обрабатывать и удаленные источники, где мой пример обрабатывает только локальный источник.

Вот пример с плагином Скотта, использующим удаленный источник данных: http://jsfiddle.net/ZEzMa/

1 голос
/ 04 марта 2012

Используете ли вы jQuery.ui.autocomplete плагин http://jqueryui.com/demos/autocomplete/#default?Если да, вы можете использовать события change, close и search для обработки того, что вы хотите.Это далеко не идеально, но плагин не делает то, что вы хотите сейчас.Я думаю, что это могло быть сообщено как проблема на их трекере ошибок:)

0 голосов
/ 24 ноября 2013

Поскольку jQueryUI 1.9 доступно событие ответа .Вы можете проверить, возвращает ли результат поиска один элемент.Если это так, вы можете назначить идентификатор для скрытого поля.В моём случае под надписью надёжной надстройкой под управлением надстройки городов - Web Api.

$("#auto").autocomplete({
    source: citiesData,
    select: fillValues,
    search: function (event, ui) {
        $("#hdnField").val(null); //removes id if previously selected
    },
    response: function (event, ui) {
        if (ui.content.length === 1) { //set id and label if only one item is found
            $("#txtField").val(ui.content[0].label);
            $("#hdnField").val(ui.content[0].value);
        }
    }
});
0 голосов
/ 04 марта 2012

jQuery autocomplete имеет событие select, которое запускается всякий раз, когда вы выбираете любой элемент из списка автозаполнения с помощью мыши или клавиатуры.

Если вы просто наберете текстовое поле, не выбрав элемент из списка автозаполнения, то select не сработает.

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

...