val () vs. text () für textarea

106

Ich verwende jQuery und frage mich, ob ich val () oder text () (oder eine andere Methode) verwenden soll, um den Inhalt eines Textbereichs zu lesen und zu aktualisieren.

Ich habe beide ausprobiert und hatte Probleme mit beiden. Wenn ich text () zum Aktualisieren des Textbereichs verwende, funktionieren Zeilenumbrüche (\ n) nicht. Wenn ich val () verwende, um den Textbereichinhalt abzurufen, wird der Text abgeschnitten, wenn er zu lang ist.

Christophe
quelle
Was bedeutet es, dass Zeilenumbrüche nicht funktionieren?
Kaz
@kaz: Der Text bleibt in der gleichen Zeile.
Christophe
Und was meinst du mit "Text wird abgeschnitten" - in der Debug-Ausgabe der Konsole? Im Rückgabewert selbst? Wäre einfacher, wenn Sie eine jsfiddle zur Verfügung stellen ...
Constantin Groß
@Connum: im Rückgabewert. Ich versuche gerade jsfiddle ...
Christophe
1
Ich bin hierher gekommen, indem ich nach abgeschnittenem Textbereichstext gesucht habe. Ich habe mein Problem behoben, indem ich am Ende von .val () ein paar \ n \ n hinzugefügt habe. Seltsam, aber es hat funktioniert.
Darin

Antworten:

148

Der beste Weg , um set / get der Wert einer Textbox die .val(), .valueMethode.

.text()Verwendet intern die Methode .textContent(oder .innerTextfür IE), um den Inhalt von a abzurufen <textarea>. Die folgenden Testfälle veranschaulichen, wie text()und in .val()Beziehung zueinander stehen:

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

Die value Eigenschaft , die von verwendet wird, .val()zeigt immer den aktuell sichtbaren Wert an, während text()der Rückgabewert falsch sein kann.

Rob W.
quelle
Danke, versuche es jetzt. Ich kann das Problem mit val () und dem Abschneiden derzeit nicht replizieren. Vielleicht habe ich den falschen Verdächtigen ...
Christophe
5
Vielen Dank für die Beispiele. Anscheinend war das mein Problem, ich schrieb mit text () und las mit val ().
Christophe
Ändern Sie den Wert eines Textbereich mit text()nicht mehr funktioniert , nachdem alles in manuell zu ändern (zB das Hinzufügen eines Zeichens)
Jan
12

.val()arbeitet immer mit textareaElementen.

.text()funktioniert manchmal und scheitert manchmal! Es ist nicht zuverlässig (getestet in Chrome 33)

Das Beste ist, dass es auch .val()nahtlos mit anderen Formularelementen (wie input) funktioniert, während dies .text()fehlschlägt.

Kshitij Saxena -KJ-
quelle