Autocomplete

View pricing →

Démarrage rapide de l'installation Pro :rocket:

Le champ autocomplete vous permet de rechercher dans une liste d'options.

La propriété options peut accepter trois formats différents de valeurs :

  • Un tableau d'objets avec les clés value et label (voir l'exemple ci-dessus)
  • Un tableau de chaînes de caractères ['A', 'B', 'C']
  • Un objet littéral avec des paires clé-valeur { a: 'A', b: 'B', c: 'C' }
  • Une fonction qui retourne l'un des formats ci-dessus
Options vides

Si vous assignez les options comme un tableau vide, le champ sera rendu dans un état désactivé.

Exemples de base

Sélection unique

Par défaut, le champ d'autocomplétion sera rendu en mode de sélection unique :

Charger l'exemple en direct

Sélection multiple

En définissant la propriété multiple, le champ d'autocomplétion sera rendu en mode de sélection multiple :

Charger l'exemple en direct
Valeur du champ de sélection multiple

Remarquez dans l'exemple ci-dessus que parce que la propriété multiple est définie, la propriété value doit être un tableau.

Filtrage

Le champ d'autocomplétion filtrera les options avec sa propre fonction de recherche interne. Vous pouvez remplacer cette fonction de recherche en fournissant à la propriété filter une fonction de votre choix. Votre fonction recevra deux arguments, l'option en cours d'itération et la valeur actuelle de search :

Charger l'exemple en direct

Options dynamiques

Au lieu de passer une liste statique à la propriété options, vous pouvez lui assigner une fonction. Cela est utile lorsque vous devez charger des options à partir d'une API ou d'une autre source.

Paramètre de recherche

Dans cet exemple, nous allons assigner à la propriété options la fonction searchMovies. En faisant cela, searchMovies recevra l'objet context en argument. Au sein de cet objet contexte se trouve la propriété search, qui est la valeur de recherche actuelle. Pour effectuer notre recherche, nous utiliserons la valeur de recherche comme paramètre de requête pour notre demande API :

Charger l'exemple en direct

Paramètres de page et hasNextPage

Un scénario courant auquel vous serez confronté est la nécessité de parcourir une API paginée. Cela peut être réalisé en référençant le même objet context que précédemment. Au sein de cet objet, nous pouvons utiliser les propriétés page et hasNextPage. La propriété page correspond au numéro de la page actuelle, et la propriété hasNextPage est une fonction à appeler lorsqu'il y a d'autres pages à charger :

Charger l'exemple en direct

Chargeur d'options

Réhydratation des valeurs

Le champ de saisie automatique de FormKit fournit également une propriété optionLoader qui vous permet de réhydrater des valeurs qui ne figurent pas dans la liste des options. Dans cet exemple, nous fournirons à l'autocomplétion une valeur initiale (un identifiant de film), et nous assignerons l'optionLoader à une fonction qui fera une requête à l'API pour obtenir le film :

Charger l'exemple en direct

Remarquez dans l'exemple ci-dessus que la fonction optionLoader reçoit deux arguments : la value de l'option sélectionnée (dans ce cas, l'identifiant du film) et le cachedOption. La propriété cachedOption est utilisée pour éviter des recherches inutiles. Si cachedOption n'est pas null, cela signifie que l'option sélectionnée a déjà été chargée, et vous pouvez retourner directement cachedOption.

Style de chargement

Au lieu d'exiger que vos utilisateurs cliquent sur le bouton Charger plus pour charger des options supplémentaires, vous pouvez définir la propriété loadOnScroll à true, ce qui paginera les options au fur et à mesure que vous défilez vers le bas de la liste des options.

Chargement à la création

Si vous préférez charger les options lorsque l'autocomplétion est créée, vous pouvez définir la propriété load-on-created à true, et notre fonction, loadCurrentlyPopularMovies, sera appelée sans que l'utilisateur ait besoin de déployer la liste déroulante :

Charger l'exemple en direct

Apparence des options

Slot d'option

Le champ de saisie automatique vous permet de personnaliser l'apparence de chaque option en utilisant le slot d'option. Dans cet exemple, nous utilisons le slot d'option pour afficher l'actif de chaque option ; logo et nom :

Charger l'exemple en direct

Apparence de la sélection

Le champ de saisie automatique vous permet de personnaliser l'apparence de l'option sélectionnée.

Propriété d'apparence de sélection

L'entrée d'autocomplétion vous permet de personnaliser l'apparence de l'option sélectionnée en utilisant la propriété selection-appearance. Pour l'autocomplétion en sélection simple ou multiple, vous pouvez définir la propriété selection-appearance à text-input (par défaut) ou option :

Charger l'exemple en direct

Slot de sélection

Si vous souhaitez uniquement personnaliser l'affichage de l'option sélectionnée, définissez l'apparence de sélection sur option.

Charger l'exemple en direct

Propriétés comportementales

Message vide

Par défaut, l'entrée d'autocomplétion ne déploiera pas la liste déroulante lorsqu'aucun résultat de recherche n'est trouvé lors du filtrage. Vous pouvez changer ce comportement en attribuant à la propriété empty-message un message à afficher lorsqu'aucun résultat n'est trouvé :

Charger l'exemple en direct

Fermer lors de la sélection

Si vous souhaitez que la liste déroulante reste déployée après avoir sélectionné une valeur, vous pouvez définir close-on-select sur false.

Charger l'exemple en direct

Recharger lors de la validation

Si vous souhaitez que les options soient rechargées lorsque l'utilisateur valide une sélection, utilisez la propriété reload-on-commit :

Charger l'exemple en direct

Ouvrir au clic

Pour activer l'ouverture de la liste déroulante de l'autocomplétion au clic sur son champ de recherche, définissez la propriété open-on-click sur true :

Charger l'exemple en direct

Ouvrir au focus

Si vous souhaitez ouvrir la liste déroulante de l'autocomplétion chaque fois que le champ est cliqué, définissez la propriété open-on-focus sur true :

Charger l'exemple en direct
Ouvrir au focus vs Ouvrir au clic

Si open-on-focus est utilisé, open-on-click sera implicitement défini.

Effacer la recherche à l'ouverture

Uniquement pour les autocomplétions à sélection unique, si vous souhaitez effacer l'entrée de recherche lorsque la liste déroulante est ouverte, définissez la propriété clear-search-on-open :

Charger l'exemple en direct

Sélection amovible

Pour une autocomplétion à sélection unique, vous pouvez définir la propriété selection-removable. Lorsqu'elle est définie sur true, un bouton de suppression sera affiché à côté de l'option sélectionnée. Cette propriété est par défaut définie sur true pour les autocomplétions avec une apparence de sélection de type option.

Sélection unique uniquement

La propriété selection-removable ne peut pas être utilisée pour les sélections multiples.

Charger l'exemple en direct

Ouvrir lors de la suppression

Si vous souhaitez que la liste déroulante s'étende lorsqu'une sélection est supprimée, utilisez la propriété open-on-remove :

Charger l'exemple en direct

Max

Si vous souhaitez limiter le nombre d'options qui peuvent être sélectionnées, vous pouvez utiliser la propriété max :

Charger l'exemple en direct

Exemple complet

Maintenant, combinons ce que nous avons appris jusqu'à présent en utilisant l'emplacement option pour un balisage personnalisé, et en définissant la propriété options sur une fonction qui retournera des pages de films à partir d'une API :

Charger l'exemple en direct

Props & Attributs

PropTypePar défautDescription
debouncenumber200Nombre de millisecondes pour temporiser les appels à une fonction d'options.
optionsany[]La liste des options parmi lesquelles l'utilisateur peut choisir.
load-on-scrollbooleanfalseLorsqu'elle est définie sur `true`, l'autocomplétion essaiera de charger plus d'options en fonction de la position de défilement de l'utilisateur final
selection-appearancestringtext-inputChange la manière dont l'étiquette de l'option est affichée.
multiplebooleanfalsePermet plusieurs sélections.
open-on-clickbooleanfalseL'autocomplétion s'étend lors de la mise au point de l'entrée, au lieu d'attendre de s'étendre jusqu'à ce qu'une valeur de recherche soit entrée.
filterfunctionnullUtilisé pour appliquer votre propre fonction de filtrage personnalisée pour les options statiques.
option-loaderfunctionnullUtilisé pour hydrater la valeur initiale, ou effectuer une demande supplémentaire pour charger plus d'informations sur une option sélectionnée.
empty-messagestringundefinedAffiche un message lorsqu'il n'y a pas d'options à afficher.
maxnumberundefinedLimite le nombre d'options qui peuvent être sélectionnées.
open-on-removebooleanfalseLorsque la propriété `selection-removable` est définie sur `true`, l'autocomplétion ne s'ouvrira pas après que la valeur sélectionnée a été supprimée. Vous pouvez changer ce comportement en définissant la propriété `open-on-remove` sur `true`.
open-on-focusbooleanfalse
options-appearancestringundefinedPour les autocomplétions à sélections multiples, cette propriété vous permet de personnaliser l'apparence des options sélectionnées. Les valeurs possibles sont `default` (la valeur par défaut) ou `checkbox`.
always-load-on-openbooleantrueDétermine si l'autocomplétion doit toujours charger ses options lorsqu'elle est ouverte ou si elle doit se référer aux options qui ont été précédemment trouvées lors de l'ouverture.
load-on-createdbooleanfalseLorsqu'elle est définie sur `true`, l'autocomplétion chargera les options lorsque le nœud sera créé.
clear-search-on-openbooleanfalseLorsqu'elle est définie sur `true`, l'entrée de recherche sera effacée lorsque la liste déroulante sera ouverte.
maxnumber | stringundefinedSi vous souhaitez limiter le nombre d'options qui peuvent être sélectionnées, vous pouvez utiliser la propriété `max` (s'applique uniquement aux sélections multiples).
popoverbooleanfalseAffiche la liste déroulante de l'entrée en utilisant l'API Popover du navigateur.
Afficher Universel props
configObject{}Options de configuration à fournir au nœud d'entrée et à tout nœud descendant de cette entrée.
delayNumber20Nombre de millisecondes à attendre avant que la valeur d'une entrée ne soit déclenchée avant que le commit hook ne soit déclenché.
dirtyBehaviorstringtouchedDétermine comment le drapeau "dirty" de cette entrée est défini. Peut être défini sur touched ou comparetouched (par défaut) est plus performant, mais ne détectera pas lorsque le formulaire correspond à nouveau à son état initial.
errorsArray[]Tableau de chaînes à afficher comme messages d'erreur sur ce champ.
helpString''Texte pour le texte d'aide associé à l'entrée.
idStringinput_{n}L'identifiant unique de l'entrée. Fournir un identifiant permet également d'accéder globalement au nœud de l'entrée.
ignoreBooleanfalseEmpêche une entrée d'être incluse dans un parent (groupe, liste, formulaire, etc). Utile lors de l'utilisation d'entrées pour l'interface utilisateur au lieu de valeurs réelles.
indexNumberundefinedPermet d'insérer une entrée à l'index donné si le parent est une liste. Si la valeur de l'entrée est indéfinie, elle hérite de la valeur de cette position d'index. Si elle a une valeur, elle l'insère dans les valeurs de la liste à l'index donné.
labelString''Texte pour l'élément label associé à l'entrée.
nameStringinput_{n}Le nom de l'entrée tel qu'identifié dans l'objet de données. Cela doit être unique au sein d'un groupe de champs.
parentFormKitNodecontextualPar défaut, le parent est un groupe d'enrobage, une liste ou un formulaire — mais cette propriété permet une affectation explicite du nœud parent.
prefix-iconString''Spécifie une icône à placer dans la section prefixIcon.
preservebooleanfalseConserve la valeur de l'entrée sur un groupe parent, une liste ou un formulaire lorsque l'entrée est démontée.
preserve-errorsbooleanfalsePar défaut, les erreurs définies sur les entrées à l'aide de setErrors sont automatiquement effacées lors de l'entrée, en définissant cette propriété sur true, l'erreur est maintenue jusqu'à ce qu'elle soit explicitement effacée.
sections-schemaObject{}Un objet de clés de section et de valeurs partielles de schéma, où chaque partie de schéma est appliquée à la section respective.
suffix-iconString''Spécifie une icône à placer dans la section suffixIcon.
typeStringtextLe type d'entrée à afficher à partir de la bibliothèque.
validationString, Array[]Les règles de validation à appliquer à l'entrée.
validation-visibilityStringblurDétermine quand afficher les règles de validation en échec d'une entrée. Les valeurs valides sont blur, dirty et live.
validation-labelString{label prop}Détermine quelle étiquette utiliser dans les messages d'erreur de validation, par défaut, elle utilise la propriété label si elle est disponible, sinon elle utilise la propriété name.
validation-rulesObject{}Règles de validation personnalisées supplémentaires à rendre disponibles pour la propriété de validation.
valueAnyundefinedInitialise la valeur initiale d'une entrée et/ou de ses enfants. Non réactif. Peut initialiser des groupes entiers (formulaires) et des listes..

Sections

Vous pouvez cibler une section spécifique d'une entrée en utilisant la "key" de cette section, ce qui vous permet de modifier les classes de cette section, le HTML (via :sections-schema) ou le contenu (via des emplacements)). En savoir plus sur les sections ici.

La structure de l'autocomplétion change selon différents scénarios :

  • Si selection-appearance est défini sur text-input (par défaut) ou option.
  • Si les sélections multiples sont activées via l'attribut multiple.

Apparence de sélection text-input

View on a larger screen to see this section diagram.

Vos athlètes préférés
Serena, Pelé
Tiger Pelé
Recherchez vos athlètes préférés.
Désolé, cet athlète n'a pas pu être trouvé.

Apparence de sélection option, sélection unique

View on a larger screen to see this section diagram.

Votre athlète préféré
Pelé
X
Tiger Pelé
Recherchez votre athlète préféré.
Désolé, cet athlète n'a pas pu être trouvé.

Apparence de la sélection option, sélection multiple

View on a larger screen to see this section diagram.

Votre athlète préféré
Tiger Pelé
Pelé
X
Recherchez votre athlète préféré.
Désolé, cet athlète n'a pas pu être trouvé.

Structure interne de la liste déroulante

Ci-dessous se trouve la structure des options internes (listbox) issue des diagrammes ci-dessus :

View on a larger screen to see this section diagram.

Section-keyDescription
selectorLa section sélecteur est un élément bouton qui ouvre la liste déroulante des options.
selectionsContient les sections de sélection individuelles.
selectionContient l'option sélectionnée.
listitemUn élément d'élément de liste qui contient la section option.
optionUne div qui contient le contenu de l'option.
listboxLa section listbox est un élément ul qui contient la liste des options.
dropdownWrapperEnveloppe la section listbox. Une div qui gère le défilement de la listbox.
optionLoadingUn élément span qui est rendu conditionnellement à l'intérieur de l'option sélectionnée lors du chargement.
loaderIconUn élément pour afficher une icône dans l'élément sélecteur lors du chargement.
selectIconUn élément pour afficher une icône dans l'élément sélecteur lorsque la liste déroulante est fermée.
loadMoreUn élément d'élément de liste qui est rendu conditionnellement en bas de la liste des options lorsqu'il y a plus de pages à charger.
loadMoreInnerUn élément span qui agit comme un enveloppe pour l'icône de chargement à l'intérieur de la section loadMore.
removeSelectionUn élément bouton utilisé pour retirer une sélection spécifique.
closeIconUn élément pour afficher une icône à l'intérieur du bouton removeSelection.
listboxButtonUn élément bouton qui est utilisé pour ouvrir la liste déroulante.
emptyMessageUn élément d'élément de liste qui est rendu conditionnellement lorsqu'il n'y a pas d'options à afficher.
emptyMessageInnerUn élément span qui agit comme un enveloppe pour la section emptyMessage.
Afficher Universel section keys
outerL'élément d'enrobage le plus externe.
wrapperUn enrobage autour de l'étiquette et de l'entrée.
labelL'étiquette de l'entrée.
prefixN'a pas de sortie par défaut, mais permet du contenu directement avant un élément d'entrée.
prefixIconUn élément pour afficher une icône avant la section de préfixe.
innerUn enrobage autour de l'élément d'entrée réel.
suffixN'a pas de sortie par défaut, mais permet du contenu directement après un élément d'entrée.
suffixIconUn élément pour afficher une icône après la section de suffixe.
inputL'élément d'entrée lui-même.
helpL'élément contenant le texte d'aide.
messagesUn enrobage autour de tous les messages.
messageL'élément (ou plusieurs éléments) contenant un message — le plus souvent des messages de validation et d'erreur.

Accessibilité

Tous les champs de saisie FormKit sont conçus en tenant compte des considérations d'accessibilité suivantes. Aidez-nous à améliorer continuellement l'accessibilité pour tous en signalant les problèmes d'accessibilité ici :

Balises sémantiquesAttributs AriaAccessible au clavierIndicateurs de focusContraste des couleurs avec le thème fourniÉtiquettes accessibles, texte d'aide et erreurs
Clé de SectionAttributPar défautDescription
inputtabindex-1 ou 0Priorise l'ordre de focus au clavier en le réglant sur -1 lorsqu'il est désactivé et 0 lorsqu'il est activé.
rolecomboboxIndique aux technologies d'assistance que cet élément fonctionne comme une combobox.
readonlyRestreint les modifications par l'utilisateur, assurant l'intégrité des données et une expérience utilisateur contrôlée et informative.
aria-autocompletelistGuide les suggestions de saisie, présentant une collection de valeurs qui pourraient compléter la saisie de l'utilisateur.
aria-activedescendantGère le focus sur l'élément descendant actif courant.
aria-expandedTransmet l'état extensible lorsque l'élément est au focus.
aria-controlsAssocie l'élément listbox, avec cet élément.
listboxButtontabindex-1 ou 0Priorise l'ordre de focus au clavier en le réglant sur -1 lorsqu'il est désactivé et 0 lorsqu'il est activé.
rolebuttonIndique aux technologies d'assistance que cet élément fonctionne comme un bouton.
aria-haspopuptrueSignale qu'un élément déclenche un pop-up ou un menu
aria-expandedTransmet l'état extensible lorsque l'élément est au focus.
aria-controlsAssocie l'élément listbox, avec cet élément.
aria-disabledCommunique l'état désactivé lorsque l'entrée est désactivée.
selectionWrappertabindex-1 ou 0Priorise l'ordre de focus au clavier en le réglant sur -1 lorsqu'il est désactivé et 0 lorsqu'il est activé.
selectionsaria-livepoliteCommunique les changements de contenu dynamique lorsque les sélections sont à l'écran.
removeSelectiontabindex-1Supprime la priorisation du focus clavier sur cet élément.
aria-controlsAssocie l'élément de saisie, avec cet élément.
Afficher Universel clé de section
labellabelforAssocie cela à un élément de saisie, améliorant l'accessibilité et l'expérience utilisateur
inputinputdisabledDésactive un élément HTML, empêchant l'interaction de l'utilisateur et signalant un état non interactif
aria-describedbyAméliore l'accessibilité en associant un élément à une description, facilitant la lecture par les lecteurs d'écran
aria-requiredAjoute l'état requis lorsque la validation est requise.
iconiconforChaque fois qu'une icône est définie comme libellé, elle la relie à un élément de saisie, améliorant l'accessibilité et l'expérience utilisateur

Interactions Clavier

Événement clavierDescription
TabDéplace le focus vers la prochaine entrée pouvant être ciblée sur la page.
Shift + TabDéplace le focus vers l'entrée précédente pouvant être ciblée sur la page.