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

L'entrée dropdown permet aux utilisateurs de sélectionner une valeur à partir d'une liste d'options. Contrairement aux éléments de sélection natifs, l'entrée déroulante vous permet de personnaliser à la fois son apparence et son comportement.

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 des options sous forme de tableau vide, l'entrée sera rendue dans un état désactivé.

Exemples de base

Sélection unique

L'entrée déroulante sera rendue en mode de sélection unique par défaut.

Charger l'exemple en direct

Sélection multiple

Les entrées déroulantes avec la propriété multiple définie seront rendues en mode de sélection multiple.

Charger l'exemple en direct
Valeur de l'entrée 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.

Options dynamiques

Au lieu de passer une liste statique à la propriété options, les options peuvent être assignées de manière dynamique.

Dans cet exemple, la fonction, loadHorrorMovies, fait une requête à l'API pour TMDB afin de charger une liste de films d'horreur. Assigner la fonction à la propriété options chargera les options lorsque l'utilisateur final ouvrira la liste déroulante.

Charger l'exemple en direct

Toujours charger à l'ouverture

Par défaut, le menu déroulant ne chargera les options de manière asynchrone qu'une seule fois (lorsque la liste est déployée). Définir la propriété always-load-on-open fera en sorte que le menu déroulant charge les options chaque fois que la liste est déployée.

Charger l'exemple en direct

Charger à la création

La propriété load-on-created fera en sorte que le menu déroulant charge les options dès qu'il est créé.

Charger l'exemple en direct

Pagination

Une fonction assignée à la propriété options recevra deux arguments : page et hasNextPage. L'argument page indique le numéro de la page actuelle, et hasNextPage est une fonction de rappel qui indique s'il y a d'autres pages à charger.

Charger l'exemple en direct

Chargement lors du défilement

Si vous préférez permettre à l'utilisateur de charger plus d'options sans avoir à cliquer sur l'option Charger plus en bas de la liste des options, vous pouvez définir la propriété load-on-scroll sur vrai, et notre fonction, loadCurrentlyPopularMovies, sera appelée à nouveau :

Charger l'exemple en direct

Chargeur d'options

L'entrée déroulante de FormKit fournit également une propriété optionLoader qui vous permet de réhydrater des valeurs qui ne sont pas dans la liste des options. Dans cet exemple, le menu déroulant se voit attribuer une valeur initiale (deux identifiants de films). La fonction optionLoader est appelée pour chaque valeur qui n'est pas dans la liste des options.

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.

Apparence des options

Contrairement aux éléments de sélection natifs, l'entrée déroulante peut être personnalisée via le balisage.

Emplacement des options

L'entrée déroulante vous permet de personnaliser l'apparence de chaque option en utilisant l'emplacement des options. Dans cet exemple, nous utilisons l'emplacement des options pour afficher l'actif de chaque option ; logo et nom :

Charger l'exemple en direct

Apparence de la sélection

L'entrée déroulante vous permet de personnaliser l'apparence de l'option ou des options sélectionnées.

Propriété d'apparence de la sélection

Lorsque vous utilisez l'entrée déroulante comme un multi-select, vous pouvez personnaliser l'apparence des options sélectionnées en définissant la propriété selection-appearance soit sur truncate (la valeur par défaut), soit sur tags.

Charger l'exemple en direct

Emplacement de sélection

Si vous souhaitez uniquement personnaliser l'affichage de l'option sélectionnée, utilisez l'emplacement de sélection (par opposition à l'emplacement d'option mentionné ci-dessus) :

Charger l'exemple en direct
Uniquement pour la sélection unique et les tags

L'emplacement de sélection n'existe pas sur le menu déroulant multi-sélection avec l'apparence de sélection truncate.

Props comportementales

Les props suivantes vous permettent de personnaliser le comportement de l'entrée de menu déroulant.

Message Vide

Par défaut, l'entrée de menu déroulant sera rendue dans un état désactivé si aucune option n'est transmise. Facultativement, vous pouvez passer la prop empty-message avec un message à afficher lorsqu'aucune option n'est disponible :

Charger l'exemple en direct

Sélection Amovible

Si vous souhaitez permettre aux utilisateurs de retirer la valeur sélectionnée, définissez la prop selection-removable sur true. Cela affichera une icône de fermeture à côté de la valeur sélectionnée :

Uniquement pour la sélection unique

La prop selection-removable ne peut pas être utilisée pour les multi-sélections.

Charger l'exemple en direct

Ouvrir lors de la suppression

Par défaut, lorsque la prop selection-removable est définie sur true, le menu déroulant ne s'ouvrira pas après que la valeur sélectionnée a été retirée. Vous pouvez changer ce comportement en définissant la prop open-on-remove sur true :

Charger l'exemple en direct

Fermer lors de la sélection

Par défaut, lorsque la prop multiple est définie, le menu déroulant ne se fermera pas après qu'une option a été sélectionnée. Vous pouvez changer ce comportement en définissant la prop close-on-select sur true :

Charger l'exemple en direct

Ouvrir lors de la mise au point

Si vous souhaitez déployer la liste dès que l'entrée du menu déroulant est mise au point, vous pouvez utiliser la prop open-on-focus :

Charger l'exemple en direct

Défilement excessif

Lors de l'utilisation du menu déroulant avec des options statiques, le menu déroulant de FormKit est également doté d'une fonctionnalité appelée overscroll. Définir la prop behavior sur overscroll affichera la liste directement au-dessus de l'entrée pour maximiser la taille disponible pour la liste :

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

Props & Attributs

PropTypePar défautDescription
optionsany[]La liste des options parmi lesquelles l'utilisateur peut choisir.
load-on-scrollbooleanfalseLorsqu'il est défini sur `true`, le menu déroulant essaiera de charger plus d'options en fonction de la position de défilement de l'utilisateur final
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.
selection-appearancestringtruncatePour les menus déroulants multi-sélections, cette propriété vous permet de personnaliser l'apparence des options sélectionnées. Les valeurs possibles sont `truncate` (la valeur par défaut) ou `tags`.
selection-removablebooleanfalsePour les menus déroulants à sélection unique, cette propriété vous permet de supprimer la valeur sélectionnée.
open-on-removebooleanfalseLorsque la propriété `selection-removable` est définie sur `true`, le menu déroulant 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`.
close-on-selectbooleanfalseLorsque la propriété `multiple` est définie, le menu déroulant ne se fermera pas après qu'une option a été sélectionnée. Vous pouvez changer ce comportement en définissant la propriété `close-on-select` sur `true`.
open-on-focusbooleanfalseSi vous souhaitez déployer la liste des options dès que le champ du menu déroulant est focalisé, vous pouvez utiliser la propriété `open-on-focus`.
options-appearancestringundefinedPour les menus déroulants multi-sélections, 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`.
multiplebooleanfalseLorsqu'il est défini sur `true`, le menu déroulant permettra à l'utilisateur de sélectionner plusieurs options.
behaviorstringundefinedAffiche la liste des options directement au-dessus du champ pour maximiser la taille disponible pour la liste.
always-load-on-openbooleanfalseDétermine si le menu déroulant doit toujours charger ses options lorsqu'il est ouvert ou s'il doit se référer aux options qui ont été trouvées précédemment lors de l'ouverture.
load-on-createdbooleanfalseLorsqu'il est défini sur `true`, le menu déroulant chargera les options lorsque le nœud est créé.
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 multi-sélections).
deselectbooleantrueLorsqu'il est défini sur `false`, l'utilisateur final ne peut pas désélectionner une option sélectionnée dans la liste.
popoverbooleanfalseAffiche la liste des options du champ 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.

Structure du sélecteur

View on a larger screen to see this section diagram.

Sélectionnez la couleur du t-shirt
Sélectionnez la couleur du t-shirt
×
Activer ou désactiver les effets sonores.
Quelque chose s'est mal passé.

Structure de la listbox

View on a larger screen to see this section diagram.

Structure de sélection

Liste déroulante simple

View on a larger screen to see this section diagram.

Gris

Liste déroulante Tronquer

View on a larger screen to see this section diagram.

Gris
Bleu
+1

Liste déroulante Tags

View on a larger screen to see this section diagram.

Gris
×
Bleu
×
Section-keyDescription
selectorLa section sélecteur est un élément bouton qui ouvre la liste des options déroulantes.
selectionContient l'option sélectionnée.
listitemUn élément d'élément de liste qui contient la section option.
optionUn 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. Un 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 lorsque le chargement est en cours.
selectIconUn élément pour afficher une icône dans l'élément sélecteur lorsque la liste déroulante est fermée.
selectedIconUn élément pour afficher une icône à côté de l'option sélectionnée à l'intérieur de la listbox.
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.
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.
tagsWrapperUn élément div qui enveloppe la section tags.
tagsUn élément div qui contient les tags.
tagWrapperUn élément div qui enveloppe le tag.
tagUn élément div qui contient l'étiquette du tag et la section removeSelection.
tagLabelUn élément span qui contient l'étiquette du tag.
removeSelectionUn élément span qui contient l'icône removeSelection.
selectorSelectionsWrapperUn élément div qui enveloppe la section selectorSelections.
selectorSelectionsUn élément div qui contient les sections selectorSelectionsItem.
selectorSelectionsItemUn élément div qui contient le contenu de l'élément selectorSelectionsItem.
truncationCountUn élément div qui contient le contenu du compteur de troncature.
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
selectortabindex0Priorise l'ordre de focus au clavier en le définissant à 0
aria-haspopuplistboxSignale la présence d'une liste déroulante activée par interaction.
aria-expandedIndique si l'élément déroulant est actuellement déployé ou réduit.
aria-controlsAssocie cet élément à l'ID de l'élément de liste.
aria-describedByAssocie cet élément à du texte descriptif d'un autre élément.
placeholderaria-hiddentrueRend cet élément non exposé à l'API d'accessibilité lorsqu'aucun espace réservé n'existe.
removeSelectiontabindex-1Priorise l'ordre de focus au clavier en le définissant à -1
aria-controlsAssocie cet élément à l'ID de l'élément de saisie.
selectionsaria-livepoliteAnnonce aux lecteurs d'écran que cet élément a été mis à jour dynamiquement sans interrompre la tâche en cours.
aria-hiddentrueRend cet élément non exposé à l'API d'accessibilité.
selectionsItemaria-hiddentrueRend cet élément non exposé à l'API d'accessibilité lorsque l'indice visible final et l'indice sont supérieurs à l'indice visible final.
tagWrappertabindex0Priorise l'ordre de focus au clavier en le définissant à 0
tagtabindex0Priorise l'ordre de focus au clavier en le définissant à 0
tagsWrapperaria-livepoliteAnnonce aux lecteurs d'écran que cet élément a été mis à jour dynamiquement sans interrompre la tâche en cours.
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.