Comment créer un dataliste instantanément consultable
Les listes déroulantes sont un moyen élégant pour fournir des options pour un champ de saisie, en particulier lorsque la liste des options disponibles est longue. Un utilisateur peut choisir l'option qu'il souhaite par taper sur le terrain, ou regarder à travers les options cela peut être un match pour ce qu'ils recherchent. Être capable de chercher parmi les options, Cependant, est la solution idéale.
Ce comportement peut être atteint avec le Élément HTML qui affiche les suggestions d'entrée pour différents contrôles, tels que le
étiquette. toutefois
affiche uniquement les options disponibles lorsque l'utilisateur a déjà tapé quelque chose dans le champ de saisie.
Nous pouvons rendre un champ de saisie plus utilisable si nous permettons aux utilisateurs de accéder à la liste complète des options à tout moment pendant le processus de prise d'entrée.
Dans ce post, nous allons voir comment créer un liste déroulante consultable à tout moment en utilisant le et
Éléments HTML et un peu de JavaScript.
1. Créer un datalist avec des options
Tout d'abord, nous créons un datalist pour différents éditeurs de texte. Assurez-vous que la valeur de la liste
attribut du étiquette est le même que la
identifiant
du tag - c'est ainsi que nous les lions les uns aux autres.
2. Rendre le dataliste visible
Par défaut, le L'élément HTML est caché. Nous ne pouvons le voir que lorsque nous commencer à taper une entrée dans le domaine le datalist est attaché à.
Cependant, il existe un moyen de "forcer" le contenu du dataliste (c'est-à-dire toutes ses options) apparaître sur la page web. Nous avons seulement besoin de lui donner un afficher
valeur de la propriété autre que aucun
, par exemple bloc de visualisation;
.
datalist display: block;
Les options affichées ne sont pas encore sélectionnables à ce stade, le navigateur seulement rend les options il trouve à l'intérieur du datalist.
Comme mentionné ci-dessus, en raison du comportement intégré du élément, une partie des options apparaissent déjà et sont sélectionnables, mais seulement lorsque l'utilisateur commence à taper une chaîne à laquelle le navigateur peut trouver une option correspondante.
Nous devons aussi trouver un mécanisme pour faire tout options (sur la capture d'écran ci-dessus affichée sous la liste des données) sélectionnable à tout autre point du processus de prise d'entrée - quand les utilisateurs veulent vérifier les options avant de taper quoi que ce soit, ou alors qu'ils ont déjà pris quelque chose dans le champ de saisie.
3. Apportez le
Élément HTML
Il existe deux façons de permettre aux utilisateurs de voir et sélectionner toutes les options quand ils veulent:
- Nous pouvons ajouter un gestionnaire d'événements de clic à chaque option, et l'utiliser pour sélectionner une option quand il est cliqué sur, ou nous pouvons aussi transformer les options dans une vraie liste déroulante, qui, par défaut, est sélectionnable.
- nous pouvons emballer les options du dataliste avec le
Élément HTML.
Nous choisirons la deuxième méthode, car elle est plus simple et peut être utilisée. comme mécanisme de secours dans les navigateurs qui ne supportent pas le élément. Lorsqu'un navigateur ne peut pas restituer et afficher le datalist, il rend le
élément avec toutes ses options au lieu.
Par défaut, le sélectionner
l'élément n'apparaît pas dans les navigateurs prenant en charge datalist, c'est-à-dire jusqu'à ce que nous forcer le datalist à rendre son contenu avec le bloc de visualisation;
Règle CSS.
Alors, quand on emballer les options de l'exemple ci-dessus (où datalist a bloc de visualisation
) avec le Balise HTML, le code ressemble à ceci:
À voir toutes les options de sélectionner
dans la liste déroulante, nous devons utiliser les attributs plusieurs
pour afficher plus d'une option, et Taille
pour le nombre d'options que nous voulons montrer.
4. Ajouter un bouton bascule
La liste déroulante complète est supposée apparaître seulement quand l'utilisateur clique sur un bouton bascule à côté du champ de saisie, pendant que l'utilisateur tape, le datalist actif est affiché. Let's changer la afficher
valeur du datalist à aucun
, et aussi ajouter un bouton à côté du champ de saisie, ce qui bascule le afficher
valeur du dataliste, et par conséquent déclencher l’apparition de sélectionner
.
datalist display: none;
Nous devons également ajouter le bouton suivant au-dessus de la datalist dans le fichier HTML:
Voyons maintenant le JavaScript. Tout d'abord, nous définissons le variables initiales.
button = document.querySelector ('button'); datalist = document.querySelector ('datalist'); select = document.querySelector ('select'); options = select.options;
Ensuite, nous devons ajouter un écouteur d'événement (toggle_ddl
) à l'événement click du bouton qui sera basculer l'apparence du datalist.
button.addEventListener ('click', toggle_ddl);
Ensuite, nous définissons le toggle_ddl ()
une fonction. Pour ce faire, nous devons vérifier la valeur de la datalist.style.display
propriété. Si c'est une chaîne vide, le datalist est caché, nous devons donc définir sa valeur à bloc
, et aussi à changer le bouton d'une flèche pointant vers le bas à une flèche pointant vers le haut.
function toggle_ddl () / * si DDL est masqué * / if (datalist.style.display === ") / * show DDL * / datalist.style.display = 'block'; this.textContent =" âÂ-² "; else hide_select (); function hide_select () / * hide DDL * / datalist.style.display ="; button.textContent = "âÂ-¼";
le hide_select ()
une fonction cache le datalist en mettant le datalist.style.display
propriété en arrière à une chaîne vide, et en changeant la flèche du bouton en arrière pour pointer vers le bas.
Dans la configuration finale, si les champs de saisie contiennent une option précédemment sélectionnée et que la liste déroulante a également été déclenchée par un clic de bouton ultérieur, l’option précédemment sélectionnée est également activée. doit être affiché comme sélectionné dans la liste déroulante.
Alors, ajoutons le code en surbrillance suivant à la toggle_ddl ()
une fonction:
function toggle_ddl () / * si DDL est masqué * / if (datalist.style.display === ") / * show DDL * / datalist.style.display = 'block'; this.textContent =" âÂ-² "; var val = valeur.entrée; pour (var i = 0; iNous souhaitons également masquer la liste déroulante lorsque l'utilisateur tape dans le champ de saisie (au moment où le datalist actif apparaîtra).
/ * lorsque l'utilisateur veut taper dans un champ de texte, masque le DDL * / input = document.querySelector ('input'); input.addEventListener ('focus', hide_select);5. Mise à jour de l'entrée lorsqu'une option est sélectionnée
Enfin, ajouter un
changement
gestionnaire d'événements aubalise, de sorte que lorsque l'utilisateur sélectionne une option dans la liste déroulante, sa valeur sera affichée à l'intérieur du
domaine aussi bien.
/ * Lorsque l'utilisateur sélectionne une option dans DDL, écrivez-la dans le champ de texte * / select.addEventListener ('change', fill_input); function fill_input () input.value = options [this.selectedIndex] .value; hide_select ();Désavantages
Le principal inconvénient de cette technique est la absence de manière directe de styliser la
élément avec CSS (l'apparition de la
et
les balises varient selon les navigateurs).
En outre, dans Firefox, le texte saisi est comparé à des options qui contient les caractères saisis, tandis que les autres navigateurs correspondent aux options commencer avec ces personnages. La spécification W3C pour datalist ne spécifie pas explicitement comment la correspondance doit être faite.
Autre que cela, cette méthode est bonne et fonctionne dans tous les principaux navigateurs, alors que dans les navigateurs où cela peut ne pas fonctionner, les utilisateurs peuvent toujours voir la liste déroulante, seules les suggestions ne s'affichent pas.
Découvrez la démo finale avec un peu de style CSS ci-dessous: