jQuery Autocomplete: événement-sélectionner

j'essaie de soumettre un formulaire quand un élément est sélectionné dans le menu. J'ai mis de la classe sur le formulaire de recherche et je suis en utilisant la manifestation sélectionner ce qui se trouve ici: http://docs.jquery.com/UI/Autocomplete#event-select

Maintenant, lorsque vous sélectionnez un élément en utilisant le clavier (haut et bas), il fonctionne. Mais si vous sélectionnez un élément à l'aide de la souris, il vous donne la valeur qui est tapé précédemment.

Cochez cette screenr: http://www.screenr.com/7T0s

C'est ce que j'utilise pour la présentation:

$("#searchform-input").autocomplete({
    select: function (a, b) {
        $(".searchform1").submit()
    }
});
25
demandé sur Andrew Whitaker 2011-10-12 02:30:44
la source

2 ответов

C'est parce que select le comportement par défaut de l'événement est exécuté après votre gestionnaire d'événements est terminé (de sorte que vous pouvez l'annuler si vous le souhaitez).

cela signifie que lorsque vous cliquez sur quelque chose, votre formulaire est soumis avant que le widget ait une chance de peupler le input correctement.

vous devriez pouvoir corriger cela en faisant ce que le widget fait normalement pour vous:

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

Maintenant, ce que vous pouvez être vous demandez-vous à oui, mais pourquoi ça marche quand j'utilise le clavier?

Cela se produit parce que le focus l'événement remplit en fait l'élément focalisé dans le input peuplé alors que vous vous déplacez de haut en bas de la liste). Quand vous mouseover un élément, le focus l'événement est appelé, peuplant le input. Lorsque vous sélectionnez quelque chose en utilisant le enter clé, la valeur correcte se trouve dans le input parce que focus événement.

63
répondu Andrew Whitaker 2011-10-12 03:06:43
la source

Hehe. Assez difficile, mais incroyablement simple à résoudre. Juste retarder la fonction de 500 millisecondes, après l'événement select. Il fonctionne parfaitement. TRAVAIL DE FAIT!! :)

$("#searchform-input").autocomplete({
select: function (a, b) {
    setTimeout(submit,500);
}});
-2
répondu Kaszoni Ferencz 2014-04-21 19:40:02
la source