2012-01-13 1 views
95

Sto usando jQuery, e si chiede se devo usare val() o il testo() (o un altro metodo) per leggere e aggiornare il contenuto di una textarea.val() vs. testo() per textarea

Ho provato entrambi e non ho avuto problemi con entrambi. Quando uso text() per aggiornare textarea, le interruzioni di riga (\ n) non funzionano. Quando uso val() per recuperare il contenuto della textarea, il testo viene troncato se è troppo lungo.

+0

Hai provato html()? – Znarkus

+0

cosa significa che le interruzioni di riga non funzionano? – kaz

+0

@Znarkus: no ... – Christophe

risposta

133

Il modo migliore per impostare/ottenere il valore di un'area di testo è il metodo .val(), .value.

.text() utilizza internamente il metodo .textContent (o .innerText per IE) per ottenere il contenuto di un <textarea>. I seguenti casi di test illustrano come text() e .val() riferiscono all'altro:

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 

Il valuestruttura, utilizzato da .val() mostra sempre il valore visibile corrente, mentre il valore di ritorno text() s' può essere sbagliato.

+0

thx, provandolo subito. Attualmente non riesco a replicare il problema che avevo con val() e il troncamento. Forse ho il sospetto sbagliato ... – Christophe

+5

Grazie mille per gli esempi. Apparentemente questo era il mio problema, ho scritto con text() e ho letto con val(). – Christophe

+0

Cambiare il valore di una textarea con 'text()' NON funziona più dopo aver modificato manualmente qualcosa (ad esempio aggiungendo un carattere) – Jan

-4

Selezionare <textarea> dal nome dell'attributo invece di id.

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

Come si ottiene questo risultato? È completamente estraneo alla domanda posta e non offre assolutamente alcun valore. È anche una cattiva guida dato che l'uso dell'ID nel selettore è molto più efficiente e non selezionerà più textareas con lo stesso nome. – michael

6

.val() lavora sempre con textarea elementi.

.text() volte funziona e altre volte fallisce! Non è affidabile (testato in Chrome 33)

Cosa c'è di meglio è che .val() funziona perfettamente con gli altri elementi del modulo troppo (come input), mentre .text() fallisce.