70 votes

jQuery autoComplete view all on click ?

J'utilise l'autocomplétion de jQuery d'une manière relativement simple :

$(document).ready(function() {
  var data = [ {text: "Choice 1"}, 
               {text: "Choice 2"}, 
               {text: "Choice 3"} ]

$("#example").autocomplete(data, {
  matchContains: true,
  minChars: 0,
  formatItem: function(item) 
    { return item.text; }
    }
  );
  });

Comment puis-je ajouter un événement onclick (comme un bouton ou un lien) qui affichera tous les choix disponibles pour l'autocomplétion ? En fait, je cherche à créer un hybride entre une saisie semi-automatique et un élément de sélection ou de décompression.

Gracias.

101voto

Tom Pietrosanti Points 2299

Vous pouvez déclencher cet événement pour afficher toutes les options :

$("#example").autocomplete( "search", "" );

Ou voyez l'exemple dans le lien ci-dessous. Cela ressemble exactement à ce que vous voulez faire.

http://jqueryui.com/demos/autocomplete/#combobox

EDITAR (de @cnanney)

Remarque : Vous devez définir minLength : 0 dans votre autocomplétion pour qu'une chaîne de recherche vide renvoie tous les éléments.

4 votes

Cela a parfaitement fonctionné ! J'ai changé un peu, et sur mon élément d'entrée, j'ai mis onfocus="javascript:$(this).autocomplete('search','');" . Merci pour votre aide !

45 votes

Ça a bien marché pour moi. Vous devez régler minLength: 0 dans votre autocomplétion pour une chaîne de recherche vide afin de retourner tous les éléments. Le mien était réglé sur 1 et il m'a fallu un peu de temps pour comprendre pourquoi cela ne fonctionnait pas.

0 votes

Content que ça ait marché ! Et merci pour la clarification, cnanney ! Je n'y avais pas pensé à l'époque.

40voto

Craig Points 541

J'ai trouvé que cela fonctionnait mieux

var data = [
    { label: "Choice 1", value: "choice_1" },
    { label: "Choice 2", value: "choice_2" },
    { label: "Choice 3", value: "choice_3" }
];

$("#example")
.autocomplete({
    source: data,
    minLength: 0
})
.focus(function() {
    $(this).autocomplete('search', $(this).val())
});

Il recherche les étiquettes et place la valeur dans l'élément $(#exemple)

4 votes

Je préfère cette réponse car si vous utilisez la <key>Tab</key> pour changer de focus entre les entrées, il devient clair que l'entrée de texte a l'autocomplétion disponible. Certaines personnes n'utilisent pas la souris pour cliquer sur tout ;)

1 votes

C'est génial ! Pour tous ceux qui ont des difficultés à le faire fonctionner, l'outil minLength: 0 semble être essentiel pour que cela fonctionne ;)

20voto

karim79 Points 178055

Je ne vois pas de moyen évident de le faire dans la documentation, mais vous pouvez essayer de déclencher l'événement focus (ou clic) sur la zone de texte activée par l'autocomplétion :

$('#myButton').click(function() {
   $('#autocomplete').trigger("focus"); //or "click", at least one should work
});

2 votes

Voir la réponse de Tom Pietrosanti ci-dessous pour savoir comment faire sans utiliser un déclencheur ou un bouton.

2 votes

Voir également la réponse de Craig ci-dessous.

7voto

Russell Horwood Points 184

Afin d'afficher tous les éléments / de simuler le comportement d'une combobox, vous devez d'abord vous assurer que vous avez défini l'option minLength sur 0 (la valeur par défaut est 1). Vous pouvez ensuite lier l'événement de clic pour effectuer une recherche avec la chaîne vide.

$('inputSelector').autocomplete({ minLength: 0 });
$('inputSelector').click(function() { $(this).autocomplete("search", ""); });

5voto

SUF Points 41

Solution de : Affichage de la liste auto-complète de l'interface utilisateur jquery sur l'événement focus

La solution pour que cela fonctionne plus d'une fois

<script type="text/javascript">
$(function() {
    $('#id').autocomplete({
        source: ["ActionScript",
                    /* ... */
                ],
        minLength: 0
    }).focus(function(){     
        //Use the below line instead of triggering keydown
        $(this).data("autocomplete").search($(this).val());
    });
});

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