Imposta il valore di textarea in jQuery


525

Sto tentando di impostare un valore in un campo textarea utilizzando jquery con il seguente codice:

$("textarea#ExampleMessage").attr("value", result.exampleMessage);

Il problema è che, una volta eseguito questo codice, non sta alterando il testo nell'area di testo?

Tuttavia quando si esegue un alert($("textarea#ExampleMessage").attr("value"))valore appena impostato viene restituito?


3
Se la magia di jQuery non funziona per impostare val () su <textarea>, e stai prendendo di mira per ID, è probabile che ci siano più elementi con lo stesso ID.
billrichards,

Risposte:


877

Hai provato val?

$("textarea#ExampleMessage").val(result.exampleMessage);

5
per lo più vero, sebbene val impieghi del tempo per assicurarsi che il valore che stai impostando sia una stringa, e attr sembra fare un po 'più di magia in generale.
enobrev,

62
Si. Un'area di testo non ha un attributo value, mentre un input ha.
MDCore

14
D'accordo, ma val () lo sta impostando in questa istanza. Loro [jquery] devono determinare il tipo di textarea e impostare il testo.
GONeale,

17
textarea ha una proprietà value (JavaScript) proprio come un input di testo. Non ha un valueattributo HTML , ma non importa, perché entrambi val()e attr('value')scrivono nella proprietà del valore JavaScript. Nota, attr()non senza impostare gli attributi HTML! Imposta solo le proprietà JavaScript, mentre cerca di nascondere la differenza per casi come class / className in cui il nome è diverso. Vedrai comunque la differenza per i luoghi in cui l'attributo e la proprietà fanno cose diverse, come negli elementi del modulo.
Bobince,

2
val(foo)funziona per me (jQuery 1.9.1). L'uso di text(foo)perde per aggiornare il contenuto di textarea perde le interruzioni di riga su IE, mentre le val(foo)conserva.
Tim

77

Textarea non ha alcun attributo value, il suo valore si trova tra i tag, ovvero:, <textarea>my text</textarea>non è come il campo di input ( <input value="my text" />). Ecco perché attr non funziona :)


50

$("textarea#ExampleMessage").val() in jquery solo una magia.

Dovresti notare quel tag textarea usando html interno per visualizzare e non nell'attributo value come il tag input.

<textarea>blah blah</textarea>
<input type="text" value="blah blah"/>

Dovresti usare

$("textarea#ExampleMessage").html(result.exampleMessage)

o

$("textarea#ExampleMessage").text(result.exampleMessage)

dipende se si desidera visualizzarlo come tag HTML o testo semplice.


1
Hai ragione, textarea non ha valore o valore e jquery sta solo facendo un po 'di magia per rendere la vita più semplice allo sviluppatore.
Scott Kirkwood,

16
Non si chiama magia, si chiama astrazione. textarea è solo 1 e 0, ma tutti gli strati di astrazione nel tuo computer lo nascondono per te. Va bene sottolinearlo, ma per favore non chiedere alla gente di sottovalutare altre risposte per una tale ragione ... :)
Espen Herseth Halvorsen,

8
attenzione: html () esegue i tag di script.
Lincoln B,

3
Da jQuery API "The .text () metodo non può essere utilizzato su input di form o script. Per impostare o ottenere il valore di testo elementi di input o textarea, utilizzare il metodo .val (). Per ottenere il valore di un elemento di script uso il metodo .html (). "
pilota

20

Ooh dai ragazzi! funziona solo con

$('#your_textarea_id').val('some_value');

Solo se si utilizza un selettore ID. Non posso, dato che il mio è un codice generato da terze parti
Jack,

16

Penso che dovrebbe funzionare:

$("textarea#ExampleMessage").val(result.exampleMessage);

10

ho avuto la stessa domanda, quindi ho deciso di provarlo nei browser attuali (siamo passati un anno e mezzo dopo questa domanda) e questo ( .val) funziona

$("textarea#ExampleMessage").val(result.exampleMessage); 

per

  • IE8
  • FF 3.6
  • FF4
  • Opera 11
  • Chrome 10

1
Per la cronaca, una delle eccezionali funzionalità di jQuery è quella di fornire la compatibilità del browser, quindi sì, è abbastanza probabile che .val()farà la sua magia in diversi browser;)
diosney

9

Su Android .vale .htmlnon ha funzionato.

$('#id').text("some value")

fatto il lavoro.


1
Da jQuery API "The .text () metodo non può essere utilizzato su input di form o script. Per impostare o ottenere il valore di testo elementi di input o textarea, utilizzare il metodo .val (). Per ottenere il valore di un elemento di script uso il metodo .html (). "
pilota

8

Ho avuto lo stesso problema e questa soluzione non ha funzionato, ma quello che ha funzionato era usare HTML

$('#your_textarea_id').html('some_value');

3
no, html()funziona solo una volta per textarea, la prossima volta, si desidera cambiare dinamicamente il contenuto di textarea, html()non funzionerà ...
Legionar

@Legionar quindi come gestire questo caso?
Jawand Singh,

bene, questo mi ha aiutato a stackoverflow.com/questions/1219860/… usando queste funzioni ho appena impostato il valore codificato in textarea usando$('#textarea').val(encodedtext);
Jawand Singh,

5

Ecco il problema: ho bisogno di generare il codice HTML dal contenuto di un dato div. Quindi, devo mettere questo codice HTML non elaborato in una textarea. Quando uso la funzione $ (textarea) .val () in questo modo:

$ (textarea) .val ("alcuni html come <input type = 'text' value = '' style =" background: url ('http://www.w.com/bg.gif') repeat-x center; "/> bla bla");

o

$ ('# idTxtArGenHtml'). val ($ ('idDivMain'). html ());

Ho avuto problemi con alcuni caratteri speciali (& '") quando sono tra virgolette. Ma quando uso la funzione: $ (textarea) .html () il testo è ok.

C'è un modulo di esempio:

<FORM id="idFormContact" name="nFormContact" action="send.php" method="post"  >
    <FIELDSET id="idFieldContact" class="CMainFieldset">
        <LEGEND>Test your newsletter&raquo; </LEGEND> 
        <p>Send to &agrave; : <input id='idInpMailList' type='text' value='youremail@gmail.com' /></p>
        <FIELDSET  class="CChildFieldset">
            <LEGEND>Subject</LEGEND>
            <LABEL for="idNomClient" class="CInfoLabel">Enter the subject: *&nbsp</LABEL><BR/>
          <INPUT value="" name="nSubject" type="text" id="idSubject" class="CFormInput" alt="Enter the Subject" ><BR/>
    </FIELDSET>
    <FIELDSET  class="CChildFieldset">
        <INPUT id="idBtnGen" type="button" value="Generate" onclick="onGenHtml();"/>&nbsp;&nbsp;
          <INPUT id="idBtnSend" type="button" value="Send" onclick="onSend();"/><BR/><BR/>
            <LEGEND>Message</LEGEND>
                <LABEL for="idTxtArGenHtml" class="CInfoLabel">Html code : *&nbsp</LABEL><BR/>
                <span><TEXTAREA  name="nTxtArGenHtml" id="idTxtArGenHtml" width='100%' cols="69" rows="300" alt="enter your message" ></TEXTAREA></span>
        </FIELDSET>
    </FIELDSET>
</FORM>

E il codice javascript / jquery che non funziona per riempire l'area di testo è:

function onGenHtml(){
  $('#idTxtArGenHtml').html( $("#idDivMain").html()  );
}

Finalmente la soluzione:

function onGenHtml(){
  $('#idTxtArGenHtml').html( $("#idDivMain").html() );
  $('#idTxtArGenHtml').parent().replaceWith( '<span>'+$('#idTxtArGenHtml').parent().html()+'</span>');
}

Il trucco è avvolgere la tua area di testo con un tag span per aiutare con la funzione di sostituzione con. Non sono sicuro che sia molto pulito, ma funziona perfettamente anche aggiungere codice HTML grezzo in un'area di testo.


5

textarea non memorizza i valori come

<textarea value="someString">

memorizza invece i valori in questo formato:

<textarea>someString</textarea>

Quindi attr("value","someString")ottieni questo risultato:

<textarea value="someString">someOLDString</textarea>.

prova $("#textareaid").val()o $("#textareaid").innerHTMLinvece.


5

L'area di testo non ha valore. jQuery .html () funziona in questo caso

$("textarea#ExampleMessage").html(result.exampleMessage);

2
no, html()funziona solo una volta per textarea, la prossima volta, si desidera cambiare dinamicamente il contenuto di textarea, html()non funzionerà ...
Legionar

e se hai fatto .empty (). html ('newContent') @Legionar?
VH,

3

Funziona per me .... Ho costruito un muro del face book ...

Ecco la base del mio codice:

// SETS MY TEXT AREA TO EMPTY (NO VALUE)
$('textarea#message_wall').val('');

3

Per impostare il valore textarea dell'HTML codificato (da mostrare come HTML) è necessario utilizzare, .html( the_var )ma come detto se si tenta di reimpostarlo, potrebbe (e probabilmente) non funzionare.

È possibile risolvere questo problema svuotando l'area di testo .empty()e quindi impostandola di nuovo con.html( the_var )

Ecco un JSFiddle funzionante: https://jsfiddle.net/w7b1thgw/2/

jQuery(function($){
    
    $('.load_html').click(function(){
        var my_var = $(this).data('my_html');
        $('#dynamic_html').html( my_var ); 
    });
    
    $('#clear_html').click(function(){
        $('#dynamic_html').empty(); 
    });
    
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<textarea id="dynamic_html"></textarea>
<a id="google_html" class="load_html" href="#" data-my_html="&lt;a href=&quot;google.com&quot;&gt;google.com&lt;/a&gt;">Google HTML</a>
<a id="yahoo_html" class="load_html" href="#" data-my_html="&lt;a href=&quot;yahoo.com&quot;&gt;yahoo.com&lt;/a&gt;">Yahoo HTML</a>
<a id="clear_html" href="#">Clear HTML</a>


2

Ho provato con .val() .text() .html()e ho avuto alcuni bug usando jQuery per leggere o impostare il valore di una textarea ... ho finito usando js nativo

$('#message').blur(function() {    
    if (this.value == '') { this.value = msg_greeting; }
});



2

Penso che manchi un aspetto importante:

$('#some-text-area').val('test');

funziona solo quando è presente un selettore ID (#)

per il selettore di classe esiste un'opzione per utilizzare il valore nativo come:

$('.some-text-area')[0].value = 'test';

1

La risposta accettata funziona per me, ma solo dopo aver realizzato che dovevo eseguire il mio codice dopo che il caricamento della pagina era terminato. In questa situazione, lo script inline non ha funzionato, suppongo perché #my_form non è stato ancora caricato.

$(document).ready(function() {
  $("#my_form textarea").val('');
});

pdub23, è sempre meglio commentare la risposta accettata piuttosto che creare una nuova risposta ...
Fábio Batista

1

Puoi persino utilizzare lo snippet di seguito.

$("textarea#ExampleMessage").append(result.exampleMessage);

1

Quando avevo JQuery v1.4.4 nella pagina, nessuno di questi ha funzionato. Quando ho iniettato JQuery v1.7.1 nella mia pagina, ha funzionato finalmente. Quindi nel mio caso, era la mia versione di JQuery a causare il problema.

id ==> textareaid

======================

var script1 = document.createElement("script");
script1.src = "http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js";
document.body.appendChild(script1);

var script2 = document.createElement("script"); 
script2.type = "text/javascript"; 
script2.innerHTML = "var $jq171 = $.noConflict();"; 
document.body.appendChild(script2);

$jq171('#textareaid').val('xxx');

1

Ho usato $(textarea).val/html/text(any_str_var)tutto per me. Se vuoi essere sicuro che la tua variabile come stringa venga aggiunta alla textarea, puoi sempre concatenarti in questo modo:

$(textarea).val(unknown_var + '')

Il metodo .val () è sicuramente usato su textarea - vedi: https://api.jquery.com/val/

.html () può essere utilizzato per ottenere o impostare il contenuto di qualsiasi elemento - consultare: https://api.jquery.com/html/#html2

.text () è uguale a .html tranne che può essere utilizzato per impostare il contenuto XML: vedi - https://api.jquery.com/text/#text-text

Puoi anche leggere di più su come ognuno agisce su personaggi speciali con ciascuno di quei link.


0

Usa questo codice e avrai sempre il valore:

var t = $(this); var v = t.val() || t.html() || t.text();

Quindi controllerà val () e imposterà il suo valore. Se val () ottiene una stringa vuota, NULL, NaN os controllerà per html () e poi per text () ...


0

Questo funziona:

var t = $('#taCommentSalesAdministration');
t.val('Hi');

Ricorda, la parte difficile qui è assicurarsi di utilizzare l'ID corretto. E prima di utilizzare l'ID, assicurati di averlo inserito #prima.


0

L'uso $("textarea#ExampleMessage").html('whatever you want to put here');può essere un buon metodo, perché .val()può avere problemi quando si utilizzano dati dal database.

Per esempio:

Un campo di database denominato as descriptionha il seguente valore asjkdfklasdjf sjklñadf. In questo caso l'uso di .val () per assegnare valore a textarea può essere un lavoro noioso.


0

Ho provato a impostare value / text / html usando JQuery ma non ci sono riuscito. Quindi ho provato quanto segue.

In questo caso stavo iniettando un nuovo elemento textarea in un DOM dopo la creazione.

 var valueToDisplay= 'Your text here even with line breaks';
 var textBox = '<textarea class="form-control" >'+ valueToDisplay +'</textarea>';
 $(td).html(textBox);

inserisci qui la descrizione dell'immagine

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.