D"ordinaire, les données circulent vers le bas, du parent vers ses enfants. La directive `bind:`
permet de faire circuler les données dans l'autre sens, de l'enfant vers le parent.
La syntaxe générale est `bind:property={expression}`, où `expression` est une _lvalue_ (c-à-d une
variable ou une propriété d'objet). Lorsque l'expression est un identifiant du même nom que la
propriété, il est possible d'omettre l'expression — autrement dit ces deux écritures sont
équivalentes :
```svelte
```
Svelte crée un gestionnaire d'évènement qui met à jour la valeur liée. Si un élément a déjà un
gestionnaire pour le même évènement, ce gestionnaire sera déclenché avant que la valeur liée soit
mise à jour.
La plupart des liaisons sont à _double sens_ (_two-way_), ce qui signifie que toute modification de
la valeur va impacter l'élément est vice-versa. Quelques liaisons sont en _lecture seule_
(_readonly_), ce qui signifie que les changements de valeur n'auront aucun effet sur l'élément.
## Liaisons de fonction [!VO]Function bindings
Vous pouvez aussi utiliser `bind:property={get, set}`, où `get` et `set` sont des fonctions, vous
permettant d'effectuer des validations et des transformations :
```svelte
value,
(v) => value = v.toLowerCase()}
/>
```
Dans le cas de liaisons en lecture seule comme [dimension bindings](#Dimensions), la valeur `get`
doit être `null` :
```svelte
...
```
> [!NOTE]
> Les liaisons de fonctions sont disponible à partir de Svelte version 5.9.0.
## ``
Une directive `bind:value` sur un élément `` crée une liaison avec la propriété `value` de
l'input :
```svelte
{message}
```
Dans le cas d'un input numérique (`type="number"` ou `type="range"`), la valeur sera transformée en
nombre
([démo](/playground/untitled#H4sIAAAAAAAAE6WPwYoCMQxAfyWEPeyiOOqx2w74Hds9pBql0IllmhGXYf5dKqwiyILsLXnwwsuI-5i4oPkaUX8yo7kCnKNQV7dNzoty4qSVBSr8jG-Poixa0KAt2z5mbb14TaxA4OCtKCm_rz4-f2m403WltrlrYhMFTtcLNkoeFGqZ8yhDF7j3CCHKzpwoDexGmqCL4jwuPUJHZ-dxVcfmyYGe5MAv-La5pbxYFf5Z9Zf_UJXb-sEMquFgJJhBmGyTW5yj8lnRaD_w9D1dAKSSj7zqAQAA))
:
```svelte
{a} + {b} = {a + b}
```
Si l'input est vide ou invalide (dans le cas de `type="number"`), la valeur sera `undefined`.
Depuis la version 5.6.0, si un `` faisant partie d'un formulaire possède une valeur par
défaut `defaultValue`, il récupèrera cette valeur par défaut plutôt que la chaîne de caractères vide
lors de la réinitialisation du formulaire. Notez que pour le rendu initial, la valeur de la liaison
est prioritaire sauf s'il cette valeur est `null` ou `undefined`.
```svelte
```
> [!NOTE]
> Utilisez les boutons de réinitialisation avec prudence, et assurez-vous que les utilisateurs et
> utilisatrices ne cliquent pas dessus accidentellement lorsqu'ils souhaitent soumettre le
> formulaire.
## ``
Les inputs de type checkbox et radio peuvent être liés avec `bind:checked` :
```svelte
```
Depuis la version 5.6.0, si un `` faisant partie d'un formulaire possède une valeur par
défaut `defaultChecked`, il récupèrera cette valeur par défaut plutôt que `false` lors de la
réinitialisation du formulaire. Notez que pour le rendu initial, la valeur de la liaison
est prioritaire sauf s'il cette valeur est `null` ou `undefined`.
```svelte
```
## ``
Les checkbox peuvent être dans un état
[indéterminé](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/indeterminate),
indépendamment de si elles sont cochées ou non :
```svelte
```
## ``
Les inputs qui fonctionnent en groupe peuvent utiliser `bind:group`.
```svelte
```
> [!NOTE] `bind:group` ne fonctionne que si les inputs sont dans le même composant Svelte.
## ``
Vous pouvez utiliser `bind:files` sur les éléments `` de `type="file"` pour obtenir une
[`FileList` des fichiers sélectionnés](https://developer.mozilla.org/fr/docs/Web/API/FileList).
Lorsque vous souhaitez mettre à jour les fichiers programmatiquement, vous pouvez toujours utiliser
un objet `FileList`. Actuellement les objets `FileList` ne peuvent pas être construits directement,
vous aurez besoin de d'abord créer un nouvel objet
[`DataTransfer`](https://developer.mozilla.org/fr/docs/Web/API/DataTransfer) et en extraire les
`files`.
```svelte
```
Les objets `FileList` ne peuvent pas non plus être modifiés. Si vous souhaitez par ex. supprimer un
fichier de la liste, vous devez créer un nouvel objet `DataTransfer` et y ajouter uniquement les
fichiers que vous souhaitez garder.
> [!NOTE] `DataTransfer` peut ne pas être disponible dans certains runtimes JS de serveur. Ne pas
> initialiser l'état lié aux `files` permet d'éviter de potentielles erreurs si les composants sont
> générés côté serveur.
## `