val () vs. text () per textarea


106

Sto usando jQuery e mi chiedo se dovrei usare val () o text () (o un altro metodo) per leggere e aggiornare il contenuto di una textarea.

Ho provato entrambi e 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 dell'area di testo, il testo viene troncato se è troppo lungo.


cosa significa che le interruzioni di riga non funzionano?
kaz

@kaz: il testo rimane sulla stessa riga.
Christophe

E cosa intendi con "il testo viene troncato" - nell'output di debug della console? Nel valore di ritorno stesso? Sarebbe più facile se fornissi un jsfiddle ...
Constantin Groß

@Connum: nel valore di ritorno. Sto provando jsfiddle adesso ...
Christophe

1
Sono arrivato qui cercando su Google il testo dell'area di testo troncato. Ho risolto il mio problema aggiungendo un paio di \ n \ n alla fine di .val (). Strano ma ha funzionato.
Darin

Risposte:


148

Il modo migliore per impostare / ottenere il valore di una textarea è il .val(), .valuemetodo.

.text() utilizza internamente il file .textContent.innerText metodo (o per IE) per ottenere il contenuto di un file <textarea>. I seguenti casi di test illustrano come text()e si .val()relazionano tra loro:

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 proprietà , usata da .val()mostra sempre il valore visibile corrente, mentre text()il valore di ritorno di s può essere sbagliato.


grazie, provandolo adesso. Al momento non sono in grado di replicare il problema che ho avuto con val () e troncamento. Forse ho sbagliato sospettato ...
Christophe

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

La modifica del valore di un'area di testo utilizzando text()NON funziona più dopo aver modificato manualmente qualcosa al suo interno (ad esempio l'aggiunta di un carattere)
gennaio

12

.val() funziona sempre con textarea elementi.

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

La cosa migliore è che .val()funziona perfettamente anche con altri elementi del modulo (come input) mentre .text()fallisce.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.