En utilisant un formulaire simple avec une zone de texte, lorsque les utilisateurs cliquent sur la zone de texte, je souhaite que le contenu de la zone de texte soit effacé.
Est-ce possible?
$('textarea#someTextarea').focus(function() {
$(this).val('');
});
Si vous voulez seulement supprimer le texte par défaut (s'il existe), essayez ceci:
$("textarea").focus(function() {
if( $(this).val() == "Default Text" ) {
$(this).val("");
}
});
En testant le texte par défaut, vous n'effacerez pas le texte saisi par l'utilisateur s'il retourne à la zone de texte.
Si vous souhaitez réinsérer le texte par défaut après leur départ (s'ils ne saisissent aucun texte), procédez comme suit:
$("textarea").blur(function() {
if( $(this).val() == "" ) {
$(this).val("Default Text");
}
});
Bien entendu, les exemples ci-dessus supposent que vous commencez par le balisage suivant:
<textarea>Default Text</textarea>
Si vous souhaitez utiliser le texte de substitution de manière sémantique, vous pouvez utiliser la nouvelle propriété HTML5:
<textarea placeholder="Default Text"></textarea>
Bien que cela ne soit supporté que par les navigateurs compatibles. Mais il présente l’avantage supplémentaire de ne pas soumettre le texte fictif lors de la soumission du formulaire.
Ma suggestion est que vous ne supprimiez que le contenu initial par défaut sur le premier focus. Lors des focus ultérieurs, vous risquez de supprimer le contenu de l'utilisateur. Pour ce faire, il suffit de .unbind () le gestionnaire de focus après le premier clic:
$("textarea").focus(function(event) {
// Erase text from inside textarea
$(this).text("");
// Disable text erase
$(this).unbind(event);
});
Notez que, puisque vous utilisez une textarea
avec des balises ouvrantes et fermantes, vous pouvez utiliser $(this).text("");
ou $(this).html("");
... textarea
est sa valeur, vous pouvez également utiliser $(this).val("");
et $(this).attr("value", "");
ou même this.value = "";
.
HTML5 offre une solution plus élégante à ce problème: l'attribut "espace réservé".
Cela créera un texte en arrière-plan de votre zone de texte qui n'apparaîtra que lorsque la zone de texte est vide.
<textarea placeholder="Enter some text !"></textarea>
Quelques problèmes ici ne sont que partiellement traités dans les réponses actuelles:
En gardant ces détails à l'esprit, j'ajouterais une classe nommée "espace réservé" au champ et utiliserais quelque chose comme ce qui suit:
$("form textarea.placeholder").focus(function(e) {
$(this).text("");
$(this).removeClass("placeholder");
$(this).unbind(e);
});
Validez que le nom de classe "espace réservé" a été supprimé lors de l'envoi du formulaire afin de garantir que l'utilisateur vraiment, vraiment souhaite soumettre un texte d'espace réservé stupide.
Si vous utilisez le plugin jQuery Validation , vous pouvez le mettre comme suit:
$.validator.addMethod("isCustom", function(value, element) {
return !$(element).hasClass("placeholder");
});
$(form).validate({
rules: {
message: {
required: true,
isCustom: true
}
},
messages: {
message: "Message required, fool!"
},
submitHandler: function(form) {
$(form).find(":submit").attr("disabled", "disabled");
form.submit();
}
});
jQuery(function($){
$("textarea").focus(function(){
$(this).val("");
});
});
Quelque chose comme ça?
$('textarea#myTextarea').focus(function() {
if ($(this).val() == 'default text') {
$(this).val('');
}
});
C'est possible et je pense que vous allez chercher un code qui peut le faire pour plus de textareas que l'un ...
Voici ce que j'utilise pour mon site:
Javascript:
<script type='text/javascript'>
function RemoveText(NameEle)
{
if ($('#' + NameEle) == 'default')
{
$('#' + NameEle).val('');
$('#' + NameEle).text('');
$('#' + NameEle).html('');
}
}
function AddText(NameEle)
{
if ($('#' + NameEle) == '')
{
$('#' + NameEle).val('default');
$('#' + NameEle).text('default');
$('#' + NameEle).html('default');
}
}
</script>
HTML:
<textarea cols='50' rows='3' onfocus='RemoveText(this)' onblur='AddText(this)' name='name' id='id'>default</textarea>
<textarea type="text" onblur="if ($(this).attr('value') == '') {$(this).val('The Default Text');}" onfocus="if ($(this).attr('value') == 'The Default Text') {$(this).val('');}">The Default Text</textarea>
J'ai trouvé ça simplement
$('#myForm textarea').val('');
efface le formulaire dans Chrome mais cela ne fonctionnait pas pour Firefox (6.x). La valeur était vide dans Firebug mais le texte précédent était toujours affiché dans la zone de texte. Pour contourner cela, je sélectionne et reconstruis les zones de texte une à la fois:
$('#' + formId + ' textarea').each(function(i){
textareaVal = $(this).parent().html();
$(this).parent().html(textareaVal);
});
Ceci termine le travail dans Firefox et ne rompt pas Chrome. Il passera en revue toutes les zones de texte sous une forme, une par une. Fonctionne dans tous les autres navigateurs (Opera, Safari, même IE).