2010-11-18 6 views
1

Comment puis-je vider un champ de texte (formulaire html) si je clique dessus pour écrire quelque chose.JQuery vide un champ de texte Quand je clique dessus

Pseudo Code:

On click #searchform 
Erase String in #searchform 
+0

Pourquoi voulez-vous faire cela? Que faire si vous avez tapé quelque chose de mal et que vous voulez juste éditer? Il semble que ce que vous voulez, c'est que si le champ de texte contient le texte original (comme: Entrez un terme de recherche), il doit être supprimé lorsque vous cliquez. Droite? – tbleckert

+0

@tbleckert En effet. Je pense que c'est une chose usabillity standard .. donc j'ai besoin d'une branche conditionnelle pour que l'utilisateur ne soit pas énervé de .. – Tomkay

+0

Pourquoi n'utilisez-vous pas l'attribut d'espace réservé HTML 5?! –

Répondre

4

Try it here

$('#searchform').click(function() { 
    if ($(this).val() == 'Enter search term') { 
     $(this).data('original', $(this).val()).val(''); 
    } 
}); 

$('#searchform').blur(function() { 
    if ($(this).val() == '') { 
     $(this).val($(this).data('original')); 
    } 
}); 

EDIT A partir de maintenant, vous devez utiliser l'attribut placeholder et si vous voulez, utilisez ci-dessus comme polyfill manquantes support d'espace réservé.

if (!('placeholder' in document.createElement('input'))){ 
    $('input[placeholder]').each(function() { 
     $(this).placeholder(); 
    }); 
} 

Et de transformer le code original en un plugin pour une utilisation facile (avec quelques petits mods).

jQuery.fn.placeholder = function() { 
    return this.each(function() { 
     var value = $(this).attr('placeholder'); 
     jQuery(this).val(value).addClass('placeholder'); 
     jQuery(this).focus(function() { 
      if (jQuery(this).val() == value) { 
       jQuery(this).val('').removeClass('placeholder'); 
      } 
     }); 

     jQuery(this).blur(function() { 
      if (jQuery(this).val() == '') { 
       jQuery(this).val(value).addClass('placeholder'); 
      } 
     }); 
    }); 
}; 
+0

Il est plus difficile d'ajouter une validation de cette façon. Imaginez que le champ est requis. Ensuite, le validateur de champ requis doit exclure la valeur initiale. Imaginez aussi que vous souhaitez utiliser une police différente pour l'espace réservé (ou au moins une couleur différente) - alors vous devez toggleClasses. Je pense que l'attribut 'placeholder' est le chemin à parcourir. –

+0

Eh bien oui, mais c'était en 2010, quand les espaces réservés n'étaient pas très connus et bien implémentés dans les navigateurs. Bien sûr, c'est une autre fois maintenant. Mais je devrais mettre à jour ma réponse. – tbleckert

5
$('#searchform').click(function() { $(this).val('') }) 
1

Si vous êtes désireux d'effacer une valeur par défaut d'un champ, comme « Enter Terme » J'utilise le code suivant:

function clearText(thefield){ 
if (thefield.defaultValue==thefield.value) 
thefield.value = "" 
} 

puis sur mon champ d'entrée ajouter:

onfocus="clearText(this)" 

il serait donc:

<input type="text" name="username" value="enter your name here" onfocus="clearText(this)"> 
+1

L'homme que vous ne devriez jamais utiliser en ligne js ... – tbleckert

+0

Assez nouveau pour le côté de scriptage des choses afin que tous les pointeurs seraient grandement reçus pour savoir pourquoi je ne devrais pas. Je partageais simplement la solution que j'ai utilisée dans le passé pour contourner ce problème. –

+1

Merci pour votre soutien Vince. :) Je suis sûr que ce travail fonctionne bien, mais le code peut être compressé d'une manière ou d'une autre. – Tomkay

3

Je vous recommande d'utiliser l'attribut espace réservé HTML5. Par exemple:

<input type="text" placeholder="some default string if empty" /> 

Cela fonctionne avec la plupart des navigateurs les plus récents et pour les plus âgés, il existe une solution plugin jQuery. Voici le lien vers le placeholder plugin.

Et vous appelez simplement:

$('input[placeholder]').placeholder(); 
+0

La démo placeholder http://davidwalsh.name/dw-content/html5-placeholder.php ne fonctionne pas dans FF 3.5 - Je ne veux pas utiliser un plugin supplémentaire pour cela .. eh bien je choisis La réponse de tbleckert .. – Tomkay

+0

@Tomkay Maintenant, l'espace réservé est la manière recommandée de faire les choses. Vous pouvez détecter si le navigateur le supporte avec Modernizr ou simplement avec un simple javascript si. Je pense que maintenant seulement IE <= 8 utiliserait un polyfill. –

+0

Ouais, je suppose que HTML5 est assez populaire maintenant pour faire le travail. J'utilise également la validation du navigateur sur de nouveaux projets. – Tomkay

Questions connexes