фильтрация параметров автозаполнения jqueryUI - PullRequest
3 голосов
/ 05 декабря 2011

Я использую виджет автозаполнения jqueryUI на моем сайте.Скажем, у меня есть следующие предметы в моей базе данных ...

  • яблоко
  • обезьяна
  • abraham
  • aardvark

Когда я набираю «а» в виджете автозаполнения, я получаю этот список под моим полем ввода.Я написал дополнительный код, чтобы при выборе элемента он добавлялся в UL ниже поля ввода, а поле ввода очищалось.

Итак, вы набираете «a», вы видите этот список иВы выбираете яблоко.Apple теперь LI в UL ниже поля ввода.Теперь вы снова набираете «а» и снова видите список ... Вот моя проблема.

Во второй раз я хочу показать все, КРОМЕ яблока.

Я бы хотел знатькак это сделать в двух разных местах:

1 - я хотел бы знать, как перехватить событие, которое запускает GET-запрос к серверу, чтобы вместо отправки "q = a" на серверкогда вы набираете «а», я могу заставить его отправить «q = a & exclude = apple, foo, bar».Затем я фильтрую серверную часть списка, и все хорошо.

2 - я также хотел бы знать, как перехватить событие, которое формирует список опций.Таким образом, я мог видеть, что он вот-вот отобразит параметры «яблоко, обезьяна и т. Д.», И я мог бы убрать «яблоко» из этого списка.

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

Спасибо!

1 Ответ

2 голосов
/ 05 декабря 2011

Вы можете выполнить оба этих действия, определив функцию для опции source виджета автозаполнения.Оттуда вы выполняете запрос AJAX самостоятельно с помощью $.ajax.Что-то вроде:

$("input").autocomplete({
    source: function (request, response) {
        var exclude = /* build excluded items list. */;
        var term = request.term;

        $.ajax({
            url: "server.php",
            data: { q: term, exclude: exclude },
            dataType: "json",
            success: function(data) {
                /* Here, you could accomplish #2 by filtering items out of data */
                /* You must call the supplied callback to let the widget know what to suggest */
                response(data);
            }
        });

    }
});

Я бы подумал, что вы создадите исключенные элементы, просто извлекая элементы, уже находящиеся в ul.

...