val () vs. text () dla textarea

107

Używam jQuery i zastanawiam się, czy powinienem używać val () lub text () (lub innej metody) do czytania i aktualizowania zawartości textarea.

Próbowałem obu i miałem problemy z obydwoma. Kiedy używam funkcji text () do aktualizacji obszaru tekstowego, podziały wierszy (\ n) nie działają. Kiedy używam funkcji val () do pobierania zawartości textarea, tekst zostaje obcięty, jeśli jest zbyt długi.

Christophe
źródło
co to znaczy, że podziały wierszy nie działają?
kaz
@kaz: tekst pozostaje w tej samej linii.
Christophe
A co masz na myśli, mówiąc „tekst zostaje obcięty” - w wyniku debugowania konsoli? W samej wartości zwracanej? Byłoby łatwiej, gdybyś podał jsfiddle ...
Constantin Groß
@Connum: w wartości zwracanej. Próbuję teraz jsfiddle ...
Christophe
1
Jestem tutaj, szukając w Google obciętego tekstu w obszarze tekstowym. Rozwiązałem problem, dodając kilka \ n \ n na końcu .val (). Dziwne, ale zadziałało.
Darin

Odpowiedzi:

148

Najlepszym sposobem, aby ustawić / uzyskać wartość textarea jest .val(), .valuemetoda.

.text()wewnętrznie używa metody .textContent(lub .innerTextdla IE), aby pobrać zawartość pliku <textarea>. Poniższe przypadki testowe ilustrują, jak text()i .val()odnoszą się do siebie nawzajem:

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

value Nieruchomość , używane przez .val()zawsze pokazuje aktualną wartość widzialnego, natomiast text()„s wartość powrotu może być źle.

Rob W
źródło
thx, próbuję tego teraz. Obecnie nie mogę odtworzyć problemu, który miałem z funkcją val () i obcięciem. Może dostałem niewłaściwego podejrzanego ...
Christophe
5
Wielkie dzięki za przykłady. Najwyraźniej to był mój problem, pisałem za pomocą text () i czytałem za pomocą val ().
Christophe,
Zmiana wartości pola tekstowego przy użyciu text()NIE działa już po ręcznej zmianie czegokolwiek w nim (np. Dodaniu znaku)
Jan
12

.val()zawsze działa z textareaelementami.

.text()działa czasami, a czasami zawodzi! To nie jest niezawodne (testowane w Chrome 33)

Najlepsze jest to, że .val()działa bezproblemowo również z innymi elementami formularza (takimi jak input), ale .text()nie działa.

Kshitij Saxena -KJ-
źródło