Comment puis-je faire en sorte qu'une zone de texte HTML affiche un indice lorsqu'elle est vide?

Je veux que la boîte de recherche sur ma page web affiche le mot "recherche" en italique gris. Lorsque la boîte reçoit le focus, elle devrait ressembler à une zone de texte vide. S'il y a déjà du texte, il devrait afficher le texte normalement (Noir, Non italique). Cela m'aidera à éviter l'encombrement par enlever l'étiquette.

BTW, c'est une recherche sur la page Ajax, donc il n'a pas de bouton.

194
demandé sur Drew Noakes 2008-09-20 17:55:10

20 réponses

Une autre option, si vous êtes heureux d'avoir cette fonctionnalité uniquement pour les nouveaux navigateurs, est d'utiliser le support offert par L'attribut placeholder de HTML 5:

<input name="email" placeholder="Email Address">

En L'absence de styles, dans Chrome, cela ressemble à:

entrez la description de l'image ici

Vous pouvez essayer des démos sur ici et dans style D'espace réservé HTML5 avec CSS.

Assurez-vous de vérifier la compatibilité du navigateur de cette fonctionnalité. Le Support dans Firefox a été ajouté dans 3.7. Chrome est très bien. Internet Explorer n'a ajouté le support que dans 10. Si vous ciblez un navigateur qui ne prend pas en charge les espaces réservés d'entrée, vous pouvez utiliser un plugin jQuery appelé jQuery HTML5 Placeholder, puis ajoutez simplement le code JavaScript suivant pour l'activer.

$('input[placeholder], textarea[placeholder]').placeholder();
334
répondu Drew Noakes 2015-08-20 18:46:55

C'est connu comme un filigrane de zone de texte, et cela se fait via JavaScript.

Ou si vous utilisez jQuery, une bien meilleure approche:

91
répondu naspinski 2012-06-08 03:08:40

Vous pouvez définir l'espace réservé en utilisant placeholder attribut {[9] } en HTML (support du navigateur ). Les font-style et color peuvent être modifiés avec CSS (bien que le support du navigateur soit limité).

input[type=search]::-webkit-input-placeholder { /* Safari, Chrome(, Opera?) */
 color:gray;
 font-style:italic;
}
input[type=search]:-moz-placeholder { /* Firefox 18- */
 color:gray;
 font-style:italic;
}
input[type=search]::-moz-placeholder { /* Firefox 19+ */
 color:gray;
 font-style:italic;
}
input[type=search]:-ms-input-placeholder { /* IE (10+?) */
 color:gray;
 font-style:italic;
}
<input placeholder="Search" type="search" name="q">
40
répondu 0b10011 2014-09-18 18:01:59

Vous pouvez ajouter et supprimer une classe CSS spéciale et modifier la valeur d'entréeonfocus/onblur avec JavaScript:

<input type="text" class="hint" value="Search..."
    onfocus="if (this.className=='hint') { this.className = ''; this.value = ''; }"
    onblur="if (this.value == '') { this.className = 'hint'; this.value = 'Search...'; }">

Spécifiez ensuite une classehint avec le style que vous voulez dans votre CSS par exemple:

input.hint {
    color: grey;
}
20
répondu levik 2012-04-14 16:23:17

Le meilleur moyen est de câbler vos événements JavaScript en utilisant une sorte de bibliothèque JavaScript comme jQuery ou YUI et de mettre votre code dans un externe .js-fichier.

Mais si vous voulez une solution rapide et sale, c'est votre solution HTML en ligne:

<input type="text" id="textbox" value="Search"
    onclick="if(this.value=='Search'){this.value=''; this.style.color='#000'}" 
    onblur="if(this.value==''){this.value='Search'; this.style.color='#555'}" />

Mise à jour : ajout du coloring-stuff demandé.

6
répondu Seb Nilsson 2012-04-14 16:25:10

J'ai posté une solution pour cela sur mon site web il y a quelques temps. Pour l'utiliser, importez un seul fichier .js:

<script type="text/javascript" src="/hint-textbox.js"></script>

Puis annotez les entrées que vous voulez avoir des astuces avec la classe CSS hintTextbox:

<input type="text" name="email" value="enter email" class="hintTextbox" />

Plus d'informations et des exemples sont disponibles ici.

4
répondu Drew Noakes 2010-06-08 04:10:31

Voici un exemple fonctionnel avec le cache de la bibliothèque Google Ajax et de la magie jQuery.

Ce serait le CSS:

<style type="text/stylesheet" media="screen">
    .inputblank { color:gray; }  /* Class to use for blank input */
</style>

Ce serait le code JavaScript:

<script language="javascript"
        type="text/javascript"
        src="http://www.google.com/jsapi">
</script>
<script>
    // Load jQuery
    google.load("jquery", "1");

    google.setOnLoadCallback(function() {
        $("#search_form")
            .submit(function() {
                alert("Submitted. Value= " + $("input:first").val());
                return false;
        });

        $("#keywords")
            .focus(function() {
                if ($(this).val() == 'Search') {
                    $(this)
                    .removeClass('inputblank')
                    .val('');
                }
            })
            .blur(function() {
                if ($(this).val() == '') {
                    $(this)
                    .addClass('inputblank')
                    .val('Search');
                }
            });
    });
</script>

Et ce serait le HTML:

<form id="search_form">
    <fieldset>
        <legend>Search the site</legend>
            <label for="keywords">Keywords:</label>
        <input id="keywords" type="text" class="inputblank" value="Search"/>
    </fieldset>
</form>

J'espère que c'est suffisant pour vous intéresser à la fois aux GAJAXLibs et à jQuery.

3
répondu Gustavo Carreno 2012-04-14 16:32:54

Maintenant, il devient très facile. En html, nous pouvons donner l'attributplaceholder pour les élémentsinput .

Par exemple

<input type="text" name="fst_name" placeholder="First Name"/>

Vérifier pour plus de détails :http://www.w3schools.com/tags/att_input_placeholder.asp

3
répondu apm 2016-07-29 17:11:13

Pour les utilisateurs de jQuery: le lien jQuery de naspinski semble cassé, mais essayez celui-ci: http://remysharp.com/2007/01/25/jquery-tutorial-text-box-hints/

Vous obtenez un tutoriel de plugin jQuery gratuit en bonus. :)

2
répondu tuomassalo 2009-05-10 16:56:50

J'ai trouvé le plugin jQueryfiligrane jQuery pour être meilleur que celui énuméré dans la réponse supérieure. Pourquoi mieux? Parce qu'il prend en charge les champs de saisie de mot de passe. En outre, définir la couleur du filigrane (ou d'autres attributs) est aussi simple que de créer une référence .watermark dans votre fichier CSS.

2
répondu Dustin 2012-06-14 14:57:20

C'est ce qu'on appelle "filigrane".

J'ai trouvé le plugin jQueryfiligrane jQuery ce qui, contrairement à la première réponse, ne nécessite pas de configuration supplémentaire (la réponse originale nécessite également un appel spécial avant que le formulaire ne soit soumis).

2
répondu elcuco 2012-06-16 07:06:22

Utilisez jQuery form Notifier - c'est l'un des plugins jQuery les plus populaires et ne souffre pas des bugs que certaines des autres suggestions jQuery font ici (par exemple, vous pouvez styliser librement le filigrane, sans vous soucier s'il sera enregistré dans la base de données).

JQuery Watermark utilise un seul style CSS directement sur les éléments de formulaire (j'ai remarqué que les propriétés de taille de police CSS appliquées au filigrane affectaient également les zones de texte-pas ce que je voulais). Le plus avec jQuery Filigrane est que vous pouvez glisser-déposer du texte dans les champs (jQuery Form Notifier ne le permet pas).

Un autre suggéré par d'autres (celui de digitalbrush.com), soumettra accidentellement la valeur du filigrane à votre formulaire, donc je le recommande fortement.

2
répondu Kimball Robinson 2012-06-16 07:08:58

Utilisez une image d'arrière-plan pour afficher le texte:

 input.foo { }
 input.fooempty { background-image: url("blah.png"); }

Alors tout ce que vous avez à faire est de détecter value == 0 et d'appliquer la bonne classe:

 <input class="foo fooempty" value="" type="text" name="bar" />

Et le code JavaScript jQuery ressemble à ceci:

jQuery(function($)
{
    var target = $("input.foo");
    target.bind("change", function()
    {
        if( target.val().length > 1 )
        {
            target.addClass("fooempty");
        }
        else
        {
            target.removeClass("fooempty");
        }
    });
});
1
répondu Kent Fredric 2012-04-14 16:26:51

Vous pourriez facilement avoir une boîte lire "recherche" puis quand le focus est changé pour elle ont le texte être supprimé. Quelque chose comme ceci:

<input onfocus="this.value=''" type="text" value="Search" />

Bien sûr, si vous faites cela, le texte de l'utilisateur disparaîtra lorsqu'il cliquera. Donc, vous voulez probablement utiliser quelque chose de plus robuste:

<input name="keyword_" type="text" size="25"  style="color:#999;" maxlength="128" id="keyword_"
onblur="this.value = this.value || this.defaultValue; this.style.color = '#999';"
onfocus="this.value=''; this.style.color = '#000';"
value="Search Term">
1
répondu Steve Kemp 2017-09-27 11:31:56

Lorsque la page se charge pour la première fois, la recherche apparaît dans la zone de texte, colorée en gris si vous le souhaitez.

Lorsque la zone de saisie reçoit le focus, sélectionnez Tout le texte dans la zone de recherche afin que l'utilisateur puisse simplement commencer à taper, ce qui supprimera le texte sélectionné dans le processus. Cela fonctionnera également bien si l'utilisateur veut utiliser la boîte de recherche une deuxième fois car il n'aura pas à mettre en surbrillance manuellement le texte précédent pour le supprimer.

<input type="text" value="Search" onfocus="this.select();" />
0
répondu 17 of 26 2008-09-20 14:15:54

J'aime la solution de "connaissance Chikuse" - simple et claire. Il suffit d'ajouter un appel à flou lorsque le chargement de la page est prêt, ce qui définira l'état initial:

$('input[value="text"]').blur();
0
répondu Isaac Liu 2012-01-11 05:07:58

Vous voulez attribuer quelque chose comme ceci à onfocus:

if (this.value == this.defaultValue)
    this.value = ''
this.className = ''

Et ceci à onblur:

if (this.value == '')
    this.value = this.defaultValue
this.className = 'placeholder'

(vous pouvez utiliser quelque chose d'un peu plus intelligent, comme une fonction framework, pour faire la commutation classname si vous le souhaitez.)

Avec quelques CSS comme ceci:

input.placeholder{
    color: gray;
    font-style: italic;
}
0
répondu Dan 2012-04-14 16:20:17
$('input[value="text"]').focus(function(){ 
if ($(this).attr('class')=='hint') 
{ 
   $(this).removeClass('hint'); 
   $(this).val(''); 
}
});

$('input[value="text"]').blur(function(){
  if($(this).val() == '')
  {
    $(this).addClass('hint');
    $(this).val($(this).attr('title'));
  } 
});

<input type="text" value="" title="Default Watermark Text">
-1
répondu Drew Noakes 2010-09-09 22:18:56

Html Simple "obligatoires" de la balise est utile.

<form>
<input type="text" name="test" id="test" required>
<input type="submit" value="enter">
</form>
-1
répondu Pradeep 2016-06-07 04:59:26

Utilisateur AJAXToolkit de http://asp.net

-3
répondu 2008-10-07 02:17:01