web-dev-qa-db-fra.com

jQuery Autocomplete: sélection d'événement

J'essaie de soumettre un formulaire lorsqu'un élément est sélectionné dans le menu. Je mets la classe sur le formulaire de recherche et j'utilise la sélection d'événement qui se trouve ici: http://docs.jquery.com/UI/Autocomplete#event-select

Maintenant, lorsque vous sélectionnez un élément à l'aide du clavier (HAUT et BAS), cela fonctionne. Mais si vous sélectionnez un élément à l'aide de la souris, il vous donne la valeur qui a été précédemment saisie.

Vérifiez cet écran: http://www.screenr.com/7T0s

Voici ce que j'utilise pour soumettre:

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

En effet, le comportement par défaut de l'événement select est exécuté après votre gestionnaire d'événements a fini de fonctionner (afin que vous puissiez l'annuler si vous le souhaitez) .

Cela signifie que lorsque vous cliquez sur quelque chose, votre formulaire est soumis avant que le widget n'ait la possibilité de remplir correctement le input.

Vous devriez pouvoir résoudre ce problème 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 vous demandez peut-être, c'est oui, mais pourquoi ça marche quand j'utilise le clavier?

Cela se produit car l'événement focus remplit réellement l'élément focalisé dans le input (regardez attentivement; vous verrez le input rempli lorsque vous montez et descendez dans la liste). Lorsque vous passez la souris sur un élément, l'événement focus est appelé, remplissant le input. Lorsque vous sélectionnez quelque chose à l'aide de la touche enter, la valeur correcte se trouve être dans input en raison de l'événement focus.

63
Andrew Whitaker