Автозаполнение jQuery: выбор события - PullRequest
25 голосов
/ 12 октября 2011

Я пытаюсь отправить форму, когда элемент выбран из меню. Я задаю класс в форме поиска и использую событие select для него, которое можно найти здесь: http://docs.jquery.com/UI/Autocomplete#event-select

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

Проверьте этот экран: http://www.screenr.com/7T0s

Это то, что я использую для отправки:

$("#searchform-input").autocomplete({
    select: function (a, b) {
        $(".searchform1").submit()
    }
});

Ответы [ 2 ]

63 голосов
/ 12 октября 2011

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

Это означает, что когда вы щелкаете что-либо, ваша форма отправляется до того, как виджет сможет правильно заполнить input.

Вы сможете исправить это, выполнив то, что виджет обычно делает для вас:

$("#searchform-input").autocomplete({
    select: function (a, b) {
        $(this).val(b.item.value);
        $(".searchform1").submit()
    }
});

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

Это происходит потому, что событие focus фактически заполняет сфокусированный элемент в input (присмотритесь; вы увидите, что input заполняется при перемещении вверх и вниз по списку). Когда вы наводите курсор мыши на элемент, вызывается событие focus, заполняющее input. Когда вы выбираете что-либо с помощью клавиши enter, правильное значение оказывается в input из-за события focus.

0 голосов
/ 21 апреля 2014

Хех.Довольно хитрый, но невероятно простой для решения.Просто задержите функцию на 500 миллисекунд после события выбора.Работает отлично.РАБОТА ВЫПОЛНЕНА!!:)

$("#searchform-input").autocomplete({
select: function (a, b) {
    setTimeout(submit,500);
}});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...