136 votes

Limiter les résultats dans l'autocomplétion de jQuery UI

J'utilise jQuery UI Autocomplete.

 $("#task").autocomplete({
     max:10,
     minLength:3,
     source: myarray
 });          

Le paramètre max ne fonctionne pas et j'obtiens toujours plus de 10 résultats. Est-ce que quelque chose m'échappe ?

11 votes

Il n'y a pas d'option appelée max dans l'autocomplétion

282voto

Andrew Whitaker Points 58588

Voici le la documentation appropriée pour le jQueryUI widget. Il n'y a pas de paramètre intégré pour limiter les résultats maximums, mais vous pouvez le faire facilement :

$("#auto").autocomplete({
    source: function(request, response) {
        var results = $.ui.autocomplete.filter(myarray, request.term);

        response(results.slice(0, 10));
    }
});

Vous pouvez fournir une fonction à la fonction source et ensuite appeler slice sur le tableau filtré.

Voici un exemple concret : http://jsfiddle.net/andrewwhitaker/vqwBP/

7 votes

Fonctionne comme un charme. C'est très utile si votre liste d'autocomplétion est très longue (~10k résultats) et ralentit le rendu html.

0 votes

Merci beaucoup pour cela ! Maintenant je peux laisser les utilisateurs avoir une liste massive dans localStorage, mais le site web est vraiment rapide ! Superbe ! :D Merci beaucoup pour cela ! :D Je suis si heureux d'avoir trouvé cette solution ^__^

0 votes

Que faire si l'on a deux boîtes de complétion automatique sur la même page ? Lorsque je fais le découpage de la réponse sur les deux, les deux ne se découpent plus du tout :/.

49voto

Jayantha Points 11282

Vous pouvez régler le minlength à une grande valeur ou vous pouvez le faire par css comme ceci,

.ui-autocomplete { height: 200px; overflow-y: scroll; overflow-x: hidden;}

0 votes

Génial. J'aime sa simplicité et le fait qu'elle laisse l'utilisateur décider.

19 votes

C'est assez compliqué. Si vous avez une liste très longue et que la saisie semi-automatique renvoie des milliers de résultats, elle sera très lente...

1 votes

Je suis d'accord avec Vajk. C'est une mauvaise solution du point de vue de l'évolutivité.

26voto

Sam Battat Points 1861

Comme "Jayantha" l'a dit, utiliser les css serait l'approche la plus simple, mais ceci pourrait être mieux,

.ui-autocomplete { max-height: 200px; overflow-y: scroll; overflow-x: hidden;}

Notez que la seule différence est "max-height". Cela permettra au widget d'être redimensionné à une hauteur inférieure, mais pas supérieure à 200px.

4 votes

À cause de votre solution. Même si elle est valide, nous discutons de solutions JQuery. Offrir une solution CSS à un programmeur n'est pas une bonne idée quand le problème peut être résolu avec jQuery. Et à la fin, il s'agit juste de masquer les résultats et non de résoudre le problème comme dans la réponse acceptée. C'est parti !

3 votes

@SamBattat Utiliser css pour un problème de programmation est un horrible hack. Imaginez essayer de déboguer ça !

11voto

Desto Points 21

Voici ce que j'ai utilisé

.ui-autocomplete { max-height: 200px; overflow-y: auto; overflow-x: hidden;}

Le débordement automatique pour que la barre de défilement ne s'affiche pas quand elle n'est pas censée le faire.

3voto

the_nutria Points 50

Si les résultats proviennent d'une requête mysql, il est plus efficace de limiter directement le résultat mysql :

select [...] from [...] order by [...] limit 0,10

où 10 est le nombre maximum de rangées que vous voulez.

1 votes

Il n'est pas bon d'interroger une base de données à chaque fois que la souris se lève ! Cela peut être lent sur certains serveurs ou sur des bases de données énormes. D'ailleurs, je n'ai pas voté contre mais j'ai écrit cette explication. Ce que les gens devraient faire quand ils votent contre. Merci.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X