Définir la valeur de textarea dans jQuery


525

J'essaie de définir une valeur dans un champ de zone de texte à l'aide de jquery avec le code suivant:

$("textarea#ExampleMessage").attr("value", result.exampleMessage);

Le problème est qu'une fois ce code exécuté, il ne modifie pas le texte dans la zone de texte?

Cependant, lors de l'exécution d'un, alert($("textarea#ExampleMessage").attr("value"))la nouvelle valeur définie est renvoyée?


3
Si la magie jQuery ne fonctionne pas pour définir val () sur <textarea>, et que vous ciblez par ID, il y a des chances qu'il y ait plusieurs éléments avec le même ID.
billrichards

Réponses:


877

Avez-vous essayé val?

$("textarea#ExampleMessage").val(result.exampleMessage);

5
surtout vrai, bien que val prenne le temps de s'assurer que la valeur que vous définissez est une chaîne, et attr semble faire un peu plus de magie dans l'ensemble.
enobrev

62
Ouais. Une zone de texte n'a pas d'attribut value, contrairement à une entrée.
MDCore

14
D'accord, mais val () le définit dans ce cas. Ils [jquery] doivent déterminer son type de zone de texte et définir le texte.
GONeale

17
textarea a une propriété value (JavaScript) comme une entrée de texte. Il n'a pas d' valueattribut HTML , mais cela n'a pas d'importance, car les deux val()et attr('value')écrivent dans la propriété de valeur JavaScript. Remarque, attr()ne définit pas d' attributs HTML! Il définit uniquement les propriétés JavaScript, tout en essayant de masquer la différence pour les cas tels que class / className où le nom est différent. Mais vous verrez toujours la différence pour les endroits où l'attribut et la propriété font des choses différentes, comme dans les éléments de formulaire.
bobince

2
val(foo)fonctionne pour moi (jQuery 1.9.1). L'utilisation de text(foo)perd pour mettre à jour le contenu de la zone de texte perd les sauts de ligne sur IE, en les val(foo)préservant.
Tim

77

Textarea n'a pas d'attribut value, sa valeur se situe entre les balises, c'est à dire:, <textarea>my text</textarea>ce n'est pas comme le champ de saisie ( <input value="my text" />). C'est pourquoi attr ne fonctionne pas :)


50

$("textarea#ExampleMessage").val() en jquery juste une magie.

Vous devriez remarquer que la balise textarea utilise le HTML interne pour afficher et non dans l'attribut value comme la balise d'entrée.

<textarea>blah blah</textarea>
<input type="text" value="blah blah"/>

Tu devrais utiliser

$("textarea#ExampleMessage").html(result.exampleMessage)

ou

$("textarea#ExampleMessage").text(result.exampleMessage)

dépend si vous souhaitez l'afficher sous forme de balises html ou de texte brut.


1
Vous avez raison, textarea n'a pas de valeur ni de valeur, et jquery fait juste de la magie pour faciliter la vie du développeur.
Scott Kirkwood

16
Cela ne s'appelle pas de la magie, cela s'appelle l'abstraction. textarea n'est que 1 et 0, mais toutes les couches d'abstraction de votre ordinateur vous le cachent. C'est bien de le souligner, mais s'il vous plaît, ne demandez pas aux gens de sous-évaluer d'autres réponses pour une telle raison ... :)
Espen Herseth Halvorsen

8
beware - html () exécute les balises de script.
Lincoln B

3
A partir de l' API jQuery "La méthode .text () ne peut pas être utilisée sur les entrées de formulaire ou les scripts. Pour définir ou obtenir la valeur de texte des éléments d'entrée ou de zone de texte, utilisez la méthode .val (). Pour obtenir la valeur d'un élément de script, utilisez la méthode .html (). "
pilote

20

Oohh allez les garçons! ça marche juste avec

$('#your_textarea_id').val('some_value');

Uniquement si vous utilisez un sélecteur d'ID. Je ne peux pas car le mien est du code généré par des tiers
Jack

16

Je pense que cela devrait fonctionner:

$("textarea#ExampleMessage").val(result.exampleMessage);

10

j'avais la même question donc j'ai décidé de l'essayer dans les navigateurs actuels (nous sommes un an et demi plus tard dans le temps après cette question), et cela ( .val) fonctionne

$("textarea#ExampleMessage").val(result.exampleMessage); 

pour

  • IE8
  • FF 3,6
  • FF4
  • Opera 11
  • Chrome 10

1
Pour mémoire, l'une des fonctionnalités exceptionnelles de jQuery est celle de fournir une compatibilité avec les navigateurs, donc oui, il est très probable que .val()cela fera sa magie dans plusieurs navigateurs;)
diosney

9

Sur Android .valet .htmln'a pas fonctionné.

$('#id').text("some value")

a fait le travail.


1
A partir de l' API jQuery "La méthode .text () ne peut pas être utilisée sur les entrées de formulaire ou les scripts. Pour définir ou obtenir la valeur de texte des éléments d'entrée ou de zone de texte, utilisez la méthode .val (). Pour obtenir la valeur d'un élément de script, utilisez la méthode .html (). "
pilote

8

J'ai eu le même problème et cette solution n'a pas fonctionné mais ce qui a fonctionné a été d'utiliser du HTML

$('#your_textarea_id').html('some_value');

3
non, html()ne fonctionne qu'une seule fois par zone de texte, la prochaine fois, vous voulez changer dynamiquement le contenu de textarea, html()ne fonctionnera pas ...
Legionar

@Legionar alors comment gérer ce cas?
Jawand Singh

bien, celui-ci m'a aidé stackoverflow.com/questions/1219860/… en utilisant ces fonctions, je viens de définir la valeur codée dans textarea en utilisant$('#textarea').val(encodedtext);
Jawand Singh

5

Là, le problème: j'ai besoin de générer du code html à partir du contenu d'un div donné. Ensuite, je dois mettre ce code html brut dans une zone de texte. Lorsque j'utilise la fonction $ (textarea) .val () comme ceci:

$ (textarea) .val ("certains html comme <input type = 'text' value = '' style =" background: url ('http://www.w.com/bg.gif') repeat-x center; "/> bla bla");

ou

$ ('# idTxtArGenHtml'). val ($ ('idDivMain'). html ());

J'ai rencontré un problème avec certains caractères spéciaux (& '") lorsqu'ils se trouvent entre guillemets. Mais lorsque j'utilise la fonction: $ (textarea) .html (), le texte est correct.

Il y a un exemple de formulaire:

<FORM id="idFormContact" name="nFormContact" action="send.php" method="post"  >
    <FIELDSET id="idFieldContact" class="CMainFieldset">
        <LEGEND>Test your newsletter&raquo; </LEGEND> 
        <p>Send to &agrave; : <input id='idInpMailList' type='text' value='youremail@gmail.com' /></p>
        <FIELDSET  class="CChildFieldset">
            <LEGEND>Subject</LEGEND>
            <LABEL for="idNomClient" class="CInfoLabel">Enter the subject: *&nbsp</LABEL><BR/>
          <INPUT value="" name="nSubject" type="text" id="idSubject" class="CFormInput" alt="Enter the Subject" ><BR/>
    </FIELDSET>
    <FIELDSET  class="CChildFieldset">
        <INPUT id="idBtnGen" type="button" value="Generate" onclick="onGenHtml();"/>&nbsp;&nbsp;
          <INPUT id="idBtnSend" type="button" value="Send" onclick="onSend();"/><BR/><BR/>
            <LEGEND>Message</LEGEND>
                <LABEL for="idTxtArGenHtml" class="CInfoLabel">Html code : *&nbsp</LABEL><BR/>
                <span><TEXTAREA  name="nTxtArGenHtml" id="idTxtArGenHtml" width='100%' cols="69" rows="300" alt="enter your message" ></TEXTAREA></span>
        </FIELDSET>
    </FIELDSET>
</FORM>

Et le code javascript / jquery qui ne fonctionne pas pour remplir la zone de texte est:

function onGenHtml(){
  $('#idTxtArGenHtml').html( $("#idDivMain").html()  );
}

Enfin la solution:

function onGenHtml(){
  $('#idTxtArGenHtml').html( $("#idDivMain").html() );
  $('#idTxtArGenHtml').parent().replaceWith( '<span>'+$('#idTxtArGenHtml').parent().html()+'</span>');
}

L'astuce consiste à envelopper votre zone de texte avec une balise span pour vous aider avec la fonction replaceWith. Je ne sais pas si c'est très propre, mais cela fonctionne parfaitement aussi ajoutez du code html brut dans une zone de texte.


5

textarea ne stocke pas les valeurs sous

<textarea value="someString">

à la place, il stocke les valeurs dans ce format:

<textarea>someString</textarea>

Alors attr("value","someString")vous obtient ce résultat:

<textarea value="someString">someOLDString</textarea>.

essayez $("#textareaid").val()ou à la $("#textareaid").innerHTMLplace.


5

La zone de texte n'a pas de valeur. jQuery .html () fonctionne dans ce cas

$("textarea#ExampleMessage").html(result.exampleMessage);

2
non, html()ne fonctionne qu'une seule fois par zone de texte, la prochaine fois, vous voulez changer dynamiquement le contenu de textarea, html()ne fonctionnera pas ...
Legionar

et si vous avez fait .empty (). html ('newContent') @Legionar?
VH

3

Cela fonctionne pour moi .... J'ai construit un mur de livre de visage ...

Voici la base de mon code:

// SETS MY TEXT AREA TO EMPTY (NO VALUE)
$('textarea#message_wall').val('');

3

Pour définir la valeur de la zone de texte du code HTML codé (pour afficher en HTML), vous devez utiliser, .html( the_var )mais comme mentionné si vous essayez de le définir à nouveau, cela peut (et probablement) ne fonctionnera pas.

Vous pouvez résoudre ce problème en vidant la zone de texte .empty(), puis en la définissant à nouveau avec.html( the_var )

Voici un JSFiddle fonctionnel: https://jsfiddle.net/w7b1thgw/2/

jQuery(function($){
    
    $('.load_html').click(function(){
        var my_var = $(this).data('my_html');
        $('#dynamic_html').html( my_var ); 
    });
    
    $('#clear_html').click(function(){
        $('#dynamic_html').empty(); 
    });
    
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<textarea id="dynamic_html"></textarea>
<a id="google_html" class="load_html" href="#" data-my_html="&lt;a href=&quot;google.com&quot;&gt;google.com&lt;/a&gt;">Google HTML</a>
<a id="yahoo_html" class="load_html" href="#" data-my_html="&lt;a href=&quot;yahoo.com&quot;&gt;yahoo.com&lt;/a&gt;">Yahoo HTML</a>
<a id="clear_html" href="#">Clear HTML</a>


2

J'ai essayé avec .val() .text() .html()et j'ai eu quelques bogues en utilisant jQuery pour lire ou définir la valeur d'une zone de texte ... je finis par utiliser js natif

$('#message').blur(function() {    
    if (this.value == '') { this.value = msg_greeting; }
});



2

Je pense qu'il manque un aspect important:

$('#some-text-area').val('test');

ne fonctionne que lorsqu'il y a un sélecteur d'ID (#)

pour le sélecteur de classe, il existe une option pour utiliser une valeur native comme:

$('.some-text-area')[0].value = 'test';

1

La réponse acceptée fonctionne pour moi, mais seulement après avoir réalisé que je devais exécuter mon code une fois le chargement de la page terminé. Dans cette situation, le script en ligne n'a pas fonctionné, je suppose que #my_form n'a pas encore terminé le chargement.

$(document).ready(function() {
  $("#my_form textarea").val('');
});

pdub23, il vaut toujours mieux commenter la réponse acceptée que de créer une nouvelle réponse…
Fábio Batista

1

Vous pouvez même utiliser l'extrait ci-dessous.

$("textarea#ExampleMessage").append(result.exampleMessage);

1

Lorsque j'avais JQuery v1.4.4 dans la page, ni l'un ni l'autre ne fonctionnait. Lors de l'injection de JQuery v1.7.1 dans ma page, cela a finalement fonctionné. Donc, dans mon cas, c'est ma version JQuery qui causait le problème.

id ==> textareaid

======================

var script1 = document.createElement("script");
script1.src = "http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js";
document.body.appendChild(script1);

var script2 = document.createElement("script"); 
script2.type = "text/javascript"; 
script2.innerHTML = "var $jq171 = $.noConflict();"; 
document.body.appendChild(script2);

$jq171('#textareaid').val('xxx');

1

J'ai utilisé $(textarea).val/html/text(any_str_var)tout a fonctionné pour moi. Si vous voulez être sûr que votre variable sous forme de chaîne est ajoutée à la zone de texte, vous pouvez toujours concatier comme ceci:

$(textarea).val(unknown_var + '')

La méthode .val () est définitivement utilisée sur la zone de texte - voir: https://api.jquery.com/val/

.html () peut être utilisé pour obtenir ou définir le contenu de n'importe quel élément - voir: https://api.jquery.com/html/#html2

.text () est identique à .html sauf que cela peut être utilisé pour définir le contenu XML: voir - https://api.jquery.com/text/#text-text

Vous pouvez également en savoir plus sur la façon dont chacun agit sur les caractères spéciaux avec chacun de ces liens.


0

Utilisez simplement ce code et vous aurez toujours la valeur:

var t = $(this); var v = t.val() || t.html() || t.text();

Il va donc vérifier val () et définir sa valeur. Si val () obtient une chaîne vide, NULL, NaN, il vérifiera html () puis text () ...


0

Cela marche:

var t = $('#taCommentSalesAdministration');
t.val('Hi');

N'oubliez pas que la partie la plus délicate ici consiste à vous assurer que vous utilisez le bon ID. Et avant d'utiliser l'ID, assurez-vous de le mettre #avant.


0

L'utilisation $("textarea#ExampleMessage").html('whatever you want to put here');peut être un bon moyen, car il .val()peut y avoir des problèmes lorsque vous utilisez des données de la base de données.

Par exemple:

Un champ de base de données nommé as descriptiona la valeur suivante asjkdfklasdjf sjklñadf. Dans ce cas, l'utilisation de .val () pour attribuer une valeur à la zone de texte peut être une tâche fastidieuse.


0

J'ai essayé de définir la valeur / text / html à l'aide de JQuery mais n'a pas réussi. J'ai donc essayé ce qui suit.

Dans ce cas, j'injectais un nouvel élément textarea à un DOM créé.

 var valueToDisplay= 'Your text here even with line breaks';
 var textBox = '<textarea class="form-control" >'+ valueToDisplay +'</textarea>';
 $(td).html(textBox);

entrez la description de l'image ici

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.