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

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

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

проверьте этот screenr: http://www.screenr.com/7T0s

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

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

2 ответов


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

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

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

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

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

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


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

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