val () vs text () pour textarea

107

J'utilise jQuery et je me demande si je devrais utiliser val () ou text () (ou une autre méthode) pour lire et mettre à jour le contenu d'un textarea.

J'ai essayé les deux et j'ai eu des problèmes avec les deux. Lorsque j'utilise text () pour mettre à jour textarea, les sauts de ligne (\ n) ne fonctionnent pas. Lorsque j'utilise val () pour récupérer le contenu textarea, le texte est tronqué s'il est trop long.

Christophe
la source
qu'est-ce que cela signifie que les sauts de ligne ne fonctionnent pas?
kaz
@kaz: le texte reste sur la même ligne.
Christophe
Et qu'entendez-vous par "le texte est tronqué" - dans la sortie de débogage de la console? Dans la valeur de retour elle-même? Ce serait plus facile si vous fournissiez un jsfiddle ...
Constantin Groß
@Connum: dans la valeur de retour. Essayer jsfiddle maintenant ...
Christophe
1
Je suis arrivé ici en recherchant sur Google du texte tronqué. J'ai résolu mon problème en ajoutant quelques \ n \ n à la fin du .val (). Bizarre mais ça a marché.
Darin le

Réponses:

148

La meilleure façon de définir / obtenir la valeur d'une zone de texte est la .val(), .valueméthode.

.text()utilise en interne la méthode .textContent(ou .innerTextpour IE) pour obtenir le contenu d'un fichier <textarea>. Les cas de test suivants illustrent comment text()et se .val()relient les uns aux autres:

var t = '<textarea>';
console.log($(t).text('test').val());             // Prints test
console.log($(t).val('too').text('test').val());  // Prints too
console.log($(t).val('too').text());              // Prints nothing
console.log($(t).text('test').val('too').val());  // Prints too

console.log($(t).text('test').val('too').text()); // Prints test

La value propriété , utilisée par .val()affiche toujours la valeur visible actuelle, alors que text()la valeur de retour de peut être erronée.

Rob W
la source
thx, essayez ceci maintenant. Je suis actuellement incapable de reproduire le problème que j'ai eu avec val () et la troncature. Peut-être que je me suis trompé de suspect ...
Christophe
5
Merci beaucoup pour les exemples. Apparemment, c'était mon problème, j'ai écrit avec text () et lu avec val ().
Christophe
La modification de la valeur d'une zone de texte en utilisant text()ne fonctionne plus après avoir modifié manuellement quoi que ce soit (par exemple, l'ajout d'un caractère)
janvier
12

.val()fonctionne toujours avec des textareaéléments.

.text()fonctionne parfois et échoue d'autres fois! Ce n'est pas fiable (testé dans Chrome 33)

Le mieux, c'est que cela .val()fonctionne de manière transparente avec d'autres éléments de formulaire (comme input), alors qu'il .text()échoue.

Kshitij Saxena -KJ-
la source