2012-01-13 9 views
95

Używam jQuery i zastanawiam się, czy powinienem użyć val() lub text() (lub innej metody), aby przeczytać i zaktualizować zawartość textarea.val() vs. tekst() dla textarea

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

+0

Czy próbowałeś html()? – Znarkus

+0

co to znaczy, że podziały wierszy nie działają? – kaz

+0

@Znarkus: no ... – Christophe

Odpowiedz

133

Najlepszym sposobem na ustawienie/pobranie wartości obszaru tekstowego jest metoda .val(), .value.

wewnętrznie używa metody .textContent (lub .innerText dla IE), aby uzyskać zawartość <textarea>. Poniższe przypadki testowe pokazują, 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 

valuenieruchomość, używane przez .val() zawsze pokazuje aktualną wartość widzialnego, natomiast text() jest zwracana wartość może być źle.

+0

thx, próbując tego teraz. Obecnie nie mogę zreplikować problemu, który miałem z wartością val() i obcięciem. Może mam niewłaściwego podejrzanego ... – Christophe

+5

Dziękuję za przykłady. Wydaje się, że to był mój problem, napisałem z text() i przeczytałem z val(). – Christophe

+0

Zmiana wartości textarea za pomocą 'text()' już nie działa po ręcznej zmianie cokolwiek w niej (np. Dodanie znaku) – Jan

-4

Wybierz <textarea> według nazwy atrybutu zamiast id.

<textarea id="message" name="message"></textarea> 
<script> 
    jQuery("textarea[name='message']").val(); 
</script> 
+15

Jak to się stało, że zdobyłeś głosy? Jest całkowicie niezwiązany z zadawanym pytaniem i nie oferuje absolutnie żadnej wartości. Jest to również kiepskie wskazówki, ponieważ używanie identyfikatora w selektorze jest o wiele bardziej wydajne i nie wybierze wielu tekstów o tej samej nazwie. – michael

6

.val() zawsze działa z elementami textarea.

działa czasami i nie udaje się inaczej! Nie jest on niezawodny (przetestowany w Chrome 33)

Co najlepsze, .val() działa bezproblemowo z innymi elementami formularza (np. input), podczas gdy .text() kończy się niepowodzeniem.