Billets publiés en octobre 2009 ↓

Pré-remplir les champs textes (suite)

Je déterre ce vieux billet sur les champs textes car il était plein de bonnes idées dans les commentaires.

Tac, tac, tac ! Reprenons svp !

Je laisse de côté le placeholder qui pour l’instant n’est pas envisageable (mais qui à terme viendra remplacer tout ça).

Yves poussait une idée intéressante avec le kbd. Ça pourrait donner ça :

<p>
   <label for="courriel">Courriel</label>
   <input type="text" id="courriel" name="courriel" value="" class="exemple" />
   <kbd>courriel@exemple.com</kbd>
</p>

Reste à savoir si c’est une bonne interprétation de la spécification :

KBD
Indicates text to be entered by the user.

Je met de côté samp qui semble plus indiqué pour des résultats.

Couplé à un petit JS ça pourrait le faire non ?

JS

jQuery(champs).each(function(){
    var exemple = 'ex';
    var that = jQuery(this);
    var papa = 'p';
    var fiston = 'kbd';
    var key = that.parent(papa).children(fiston);
    key.hide();
    that.addClass(exemple).val(key.text());
    that.focus(function(){
       if(that.val()==key.text())
          that.removeClass(exemple).val('');
    });
    that.blur(function(){
       if(that.val()=='')
          that.addClass(exemple).val(key.text());
    });
});
champs('input.exemple');

CSS

.ex
{
    color:#DDD;
    background-color:inherit;
}

Ou encore mieux si on a la place :

  • ne pas ajouter de script ;
  • laisser l’exemple à côté ;
  • et se servir de value="" pour les cas d’erreur (à corriger sans tout avoir à re-saisir).

Ainsi :

HTML

<p>
   <label for="courriel">Courriel</label>
   <input type="text" id="courriel" name="courriel" value="vincentàhtmlzengarden.com" class="erreur" />
   <kbd>courriel@exemple.com</kbd>
</p>

CSS

.erreur
{
    font-weight:bold;
    color:#F00;
    background-color:inherit;
}

Reste une question : faut-il placer le kbd avant le champs pour des soucis d’accessibilité ?

HTML

<p>
   <label for="courriel">Courriel</label>
   (<kbd>courriel@exemple.com</kbd>)
   <input type="text" id="courriel" name="courriel" value="vincentàhtmlzengarden.com" class="erreur" />
</p>

ou

<p>
   <label for="courriel">Courriel (<kbd>courriel@exemple.com</kbd>)</label>
   <input type="text" id="courriel" name="courriel" value="vincentàhtmlzengarden.com" class="erreur" />
</p>

Ou encore lui placer également un label ?

HTML

<p>
   <label for="courriel">Courriel</label>
   <input type="text" id="courriel" name="courriel" value="vincentàhtmlzengarden.com" class="erreur" />
   <label for="courriel"><kbd>courriel@exemple.com</kbd></label>
</p>

À vos claviers !

PS : l’exemple est ligne est ici.