<input type="hidden">
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Les éléments <input>
de type "hidden"
permettent aux développeurs web d'inclure des données qui ne peuvent pas être vues ou modifiées lorsque le formulaire est envoyé. Cela permet par exemple d'envoyer l'identifiant d'une commande ou un jeton de sécurité unique. Les champs de ce type sont invisibles sur la page.
Note : La ligne de code suivante est suivie du rendu associé... si l'exemple fonctionne correctement, vous ne devriez rien voir :)
Exemple simple
Valeur
L'attribut value
de l'élément contient une chaîne de caractères masquée qui est envoyée au serveur avec le formulaire. Cette valeur ne peut pas directement être éditée par l'utilisateur sur la page (mais elle est toujours accessible et modifiable via les outils de développement intégrés au navigateur).
Attention : Bien que la valeur ne soit pas affichée sur la page, elle est visible et modifiable par l'utilisateur si ce dernier utilise les outils de développements intégrés aux navigateurs (par exemple "Afficher la source"). Le type hidden
ne doit donc pas être utilisé comme mécanisme de sécurité.
Attributs supplémentaires
En complément des attributs communs à l'ensemble des éléments <input>
, les champs masqués peuvent utiliser les attributs suivants :
Attribut | Description |
---|---|
name |
À l'instar de l'ensemble des champs de saisie, ce sera le nom auquel associer la donnée lors de l'envoi du formulaire. Si la valeur spéciale "_charset_" est utilisée pour cet attribut, la valeur du champ sera l'encodage utilisé pour l'envoi du formulaire. |
name
Cet attribut fait partie des attributs communs à l'ensemble des éléments <input>
mais il possède un comportement particulier pour les champs masqués. En effet, si cet attribut utilise la valeur spéciale "_charset_"
, la valeur du champ envoyée avec le formulaire sera l'encodage utilisé pour l'envoi du formulaire.
Utiliser les valeurs masquées dans les formulaires
Comme évoqué ci-avant, les éléments <input type="hidden"
> peuvent être utilisés lorsque le formulaire sert à transmettre des données avec lesquelles l'utilisateur n'est pas censé intéragir.
Suivre les modifications apportées au contenu
Un usage fréquent de ces éléments est de garder un registre des données qui doivent être mises à jour dans une base de données lorsque le formulaire est envoyé. Le processus est généralement le suivant :
- L'utilisateur édite du contenu (un billet de blog, une fiche d'un produit) en commençant par cliquer sur le bouton Éditer.
- Le contenu à modifier est extrait de la base de données et est chargé dans le formulaire HTML afin que l'utilisateur puis appliquer les modifications voulues.
- Après avoir éditer, l'utilisateur envoie le formulaire et les données mises à jour sont envoyées au serveur qui se charge d'appliquer cette mise à jour en base de données.
Ici, lors de la deuxième étape, on peut récupérer l'identifiant de l'enregistrement et le placer dans un champ caché du formulaire. Lorsque le formulaire est envoyé à l'étape 3, l'identifiant est automatiquement envoyé au serveur avec le contenu. L'identifiant permet alors au serveur de connaître l'enregistrement de la base de données qui doit être mis à jour.
Pour un exemple complet, voir la section Exemples ci-après.
Contribuer à la sécurité d'un site web
Les champs masqués sont également employés afin de stocker des jetons de sécurité (aussi appelés « secrets ») afin d'améliorer la sécurité d'un site. Pour un formulaire sensible (par exemple le transfert d'argent d'un compte à un autre sur un site bancaire), le secret est généré par le serveur et intégré sur la page afin de prouver l'identité de l'utilisateur et que c'est bien le bon formulaire qui est utilisé pour effectuer le transfert.
Cela permet d'éviter le cas où quelqu'un crée un faux site et un faux formulaire pour transférer de l'argent sur le mauvais compte (c'est ce qu'on appelle Cross Site Request Forgery (CSRF)).
Note : Comme indiqué précédemment, placer le secret dans un champ masqué ne le rend pas plus sécurisé. La composition, l'encodage de la clé et la vérification par le serveur sont autant d'étapes cruciales pour garantir la qualité du secret utilisé. Le champ masqué n'est finalement qu'un outil qui simplifie l'envoi de cette information au serveur lorsque l'utilisateur envoie le formulaire.
Validation
Aucune contrainte de validation n'est appliquée sur ces valeurs.
Exemples
Voyons comment implémenter une version simple du formulaire d'édition décrit précédemment : on utilise un champ masqué pour mémoriser l'identifiant de la donnée qui est modifiée.
HTML
Voici le fragment HTML pour le formulaire :
<form>
<div>
<label for="title">Titre du billet :</label>
<input type="text" id="title" name="title" value="Mon meilleur billet" />
</div>
<div>
<label for="content">Contenu :</label>
<textarea id="content" name="content" cols="60" rows="5">
Voici le contenu de mon meilleur billet, j'espère que ça vous plaît !
</textarea>
</div>
<div>
<button type="submit">Mettre à jour le billet</button>
</div>
<input type="hidden" id="postId" name="postId" value="34657" />
</form>
CSS
Ajoutons quelques éléments de mise en forme :
html {
font-family: sans-serif;
}
form {
width: 500px;
}
div {
display: flex;
margin-bottom: 10px;
}
label {
flex: 2;
line-height: 2;
text-align: right;
padding-right: 20px;
}
input,
textarea {
flex: 7;
font-family: sans-serif;
font-size: 1.1rem;
padding: 5px;
}
textarea {
height: 60px;
}
JavaScript
Le serveur génèrera la page HTML avec l'identifiant "postID"
qui contient l'identifiant du billet de la base de données. Lorsque l'utilisateur termine l'édition, c'est le navigateur qui envoie cette donnée au serveur ainsi que les autres données du formulaire. Aucun code JavaScript n'est nécessaire pour gérer cela.
Résultat
Note : Vous pouvez consulter l'exemple sur GitHub (cf. le code source et la démonstration live).
Lorsque le formulaire est envoyé, les données envoyées au serveur ressembleront à :
title=Mon+meilleur+billet&content=Le+contenu+de+mon+meilleur+article.+J'espère+qu'il+vous+plaît!&postId=34657
Bien que le champ masqué soit invisible sur la page, il fait toujours partie des données envoyées.
Résumé technique
Valeur |
Une chaîne de caractères (DOMString ) qui
représente la valeur de la donnée masquée qu'on souhaite envoyer au
serveur.
|
Évènements | Aucun. |
Attributs pris en charge | autocomplete |
Attributs IDL | value |
Méthodes | Aucune. |
Spécifications
Specification |
---|
HTML Standard # hidden-state-(type=hidden) |
Compatibilité des navigateurs
BCD tables only load in the browser
Voir aussi
- Guide sur les formulaires HTML
<input>
- L'interface DOM
HTMLInputElement