Подтвердить что ты не робот

Автозаполнение jQuery: выбор события

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

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

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

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

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

Ответ 1

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

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

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

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

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

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

Ответ 2

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

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