Запретить изменение ввода при нажатии автозаполнения пользовательского интерфейса jQuery - PullRequest
4 голосов
/ 02 марта 2012

У меня есть элемент ввода текста, который использует автозаполнение пользовательского интерфейса jQuery. Входные данные связаны с событием onchange, чтобы изменить некоторые другие значения формы на основе выбора пользователя. Я также хочу изменить эти другие значения формы, когда пользователь выбирает параметр из автозаполнения.

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

Мой вопрос таков: есть ли способ, чтобы onchange можно было либо не запускать, ни прерывать, в случае, если пользователь нажал на опцию автозаполнения. Примечание: это происходит только при нажатии, выбор опции с использованием только клавиатуры не вызывает смену ввода.

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

Я выполнил довольно много консольных.log (), и событие onchange запускается до всех других событий, которые я могу себе представить, включая фокус ввода, фокус элемента автозаполнения и т. Д.

1 Ответ

4 голосов
/ 03 марта 2012

Эта проблема как раз и является причиной события change автозаполнения. Похоже, вы должны иметь возможность использовать это событие для выполнения логики в зависимости от того, выбрал ли пользователь элемент (тем самым удалив ваши обработчики событий onchange и autocompleteselect). Например:

$("#auto").autocomplete({
    source: ['hi', 'bye', 'foo', 'bar'],
    change: function (event, ui) {
        if (ui.item) {
            /* user selected an item */           
        } else {
            /* user entered a new item */
        }
    }
});

Пример: http://jsfiddle.net/bdDs7/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...