JQuery'de textarea değerini ayarlama


525

Aşağıdaki kod ile jquery kullanarak bir textarea alanında bir değer ayarlamaya çalışıyorum:

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

Sorun, bu kod yürütüldüğünde, metin alanındaki metni değiştirmiyor mu?

Ancak alert($("textarea#ExampleMessage").attr("value"))yeni bir ayar yaparken değer döndürülür?


3
JQuery sihri <textarea> üzerinde val () ayarlamak için çalışmıyorsa ve kimliğe göre hedefliyorsanız, aynı kimliğe sahip birden çok öğe olabilir.
billrichards

Yanıtlar:


877

Val'i denedin mi?

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

5
val, ayarladığınız değerin bir dize olduğundan emin olmak için zaman ayırsa da, attr genel olarak biraz daha sihir yapıyor gibi görünüyor.
enobrev

62
Evet. Bir metin alanının değer özniteliği yoktur, giriş ise bir özniteliğe sahiptir.
MDCore

14
Kabul edildi, ancak val () bu örnekte ayarlıyor. [Jquery], metin alanı türünü belirlemeli ve metni ayarlamalıdır.
GONeale

17
textarea, metin girişi gibi bir değer (JavaScript) özelliğine sahiptir. HTML valueözniteliği yoktur, ancak her ikisi de val()ve attr('value')JavaScript değeri özelliğine yazdığından bu önemli değildir . Not attr()yok değil HTML özelliklerini ayarlamak! Adın farklı olduğu class / className gibi durumlar için farkı gizlemeye çalışırken, yalnızca JavaScript özelliklerini ayarlar. Ancak, özellik ve özelliğin, form öğelerinde olduğu gibi farklı şeyler yaptığı yerler için farkı görmeye devam edersiniz.
bobince

2
val(foo)benim için çalışıyor (jQuery 1.9.1). Kullanılması text(foo)textarea içeriğini güncellemek kaybeder kullanarak, IE üzerinde linebreaks kaybeder val(foo)korur onları.
Tim

77

Textarea hiçbir değer özelliğine sahip değildir, değeri etiketler arasında gelir, yani:, <textarea>my text</textarea>giriş alanı ( <input value="my text" />) gibi değildir . Bu yüzden attr çalışmıyor :)


50

$("textarea#ExampleMessage").val() jquery sadece bir sihir.

Sen dikkat etmelidir textarea kullanarak etiketi iç html ekranına ve değer özelliğinde değil sadece giriş etiketi gibi.

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

Kullanmalısın

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

veya

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

HTML etiketleri veya düz metin olarak görüntülemek isteyip istemediğinize bağlıdır.


1
Haklısın, textarea'nın bir val veya değeri yok ve jquery, hayatı geliştirici için kolaylaştırmak için biraz sihir yapıyor.
Scott Kirkwood

16
Buna sihir değil, soyutlama denir. textarea sadece 1'ler ve 0'lardır, ancak bilgisayarınızdaki soyutlama katmanları bunu sizin için gizler. İşaret etmek sorun değil, ama lütfen insanlardan böyle bir nedenden ötürü diğer cevapları indirmelerini istemeyin ... :)
Espen Herseth Halvorsen

8
beware - html () kod etiketlerini çalıştırır.
Lincoln B

3
Kaynaktan JQuery API .text"() yöntemi bir şekilde giriş veya komut dosyaları kullanılamaz. .Val () yöntemini ayarlamak veya giriş veya metin öğelerinin metin değerini elde etmek için. Bir yazı elemanı, kullanım değerini elde etmek için .html () yöntemi. "
pilot

20

Hadi ama çocuklar! sadece ile çalışır

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

Yalnızca bir kimlik seçici kullanıyorsanız. Benimki üçüncü tarafça üretilen kod olduğu için yapamam
Jack

16

Bunun işe yarayacağını düşünüyorum:

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

10

Aynı soru vardı, bu yüzden mevcut tarayıcılarda denemeye karar verdim (bu sorunun ardından bir buçuk yıl sonra) ve bu ( .val) çalışıyor

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

için

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

1
Kayıt için, olağanüstü jQuery işlevlerinden biri tarayıcı uyumluluğu sağlamaktır, bu yüzden evet, .val()sihrini birkaç tarayıcıda yapacak gibi görünüyor ;)
diosney

9

Android .valve .htmlişe yaramadı.

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

işi yaptı.


1
Kaynaktan JQuery API .text"() yöntemi bir şekilde giriş veya komut dosyaları kullanılamaz. .Val () yöntemini ayarlamak veya giriş veya metin öğelerinin metin değerini elde etmek için. Bir yazı elemanı, kullanım değerini elde etmek için .html () yöntemi. "
pilot

8

Aynı sorunu yaşadım ve bu çözüm işe yaramadı ama işe yarayan html kullanmaktı

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

3
Hayır, html()her metin için yalnızca bir kez çalışıyor, bir dahaki sefere, içeriğini dinamik olarak değiştirmek istediğinizde textarea, html()çalışmayacak ...
Legionar

@Legionar sonra bu dava nasıl ele alınır?
Jawand Singh

iyi, bu bana yardımcı oldu stackoverflow.com/questions/1219860/… bu fonksiyonları kullanarak ben sadece textarea kullanarak kodlanmış değeri ayarlamak kullanarak$('#textarea').val(encodedtext);
Jawand Singh

5

Sorun var: Ben verilen bir div içeren html kodu oluşturmak gerekiyor. Sonra, bu ham html kodu bir textarea koymak zorunda. $ (Textarea) .val () işlevini şu şekilde kullandığımda:

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

veya

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

Bazı özel karakter (& '") ile quot arasında olduklarında sorun vardı. Ama ben işlevini kullandığınızda: $ (textarea) .html () metin ok.

Bir örnek form var:

<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>

Ve textarea'yı doldurmak için çalışmayan javascript / jquery kodu:

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

Sonunda çözüm:

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

Hile, textarea'nızı replaceWith işlevine yardımcı olmak için bir span etiketi ile sarmaktır. Çok temiz olup olmadığından emin değilim, ama mükemmel bir çalışma da bir textarea ham html kodu ekleyin.


5

textarea değerleri şu şekilde saklamaz:

<textarea value="someString">

bunun yerine, değerleri şu biçimde depolar:

<textarea>someString</textarea>

Yani attr("value","someString")bu sonuç alır:

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

deneyin $("#textareaid").val()veya $("#textareaid").innerHTMLonun yerine.


5

Metin Alanı'nın değeri yok. jQuery .html () bu durumda çalışır

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

2
Hayır, html()her metin için yalnızca bir kez çalışıyor, bir dahaki sefere, içeriğini dinamik olarak değiştirmek istediğinizde textarea, html()çalışmayacak ...
Legionar

ve .empty (). html ('newContent') @Legionar yaptıysanız?
VH

3

Benim için çalışıyor .... Bir yüz kitabı duvarı inşa ettim ...

İşte benim kodun temeli:

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

3

Kodlanmış HTML'nin textarea değerini (HTML olarak göstermek için) ayarlamak için kullanmalısınız, .html( the_var )ancak tekrar denediğinizde ve tekrar denerseniz belirtildiği gibi (ve muhtemelen) çalışmayacaktır.

Bunu textarea'yı boşaltıp .empty()ardından tekrar ayarlayarak düzeltebilirsiniz..html( the_var )

İşte çalışan bir JSFiddle: 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

Ben denedim .val() .text() .html()ve bir textarea değerini ayarlamak veya ayarlamak için jQuery kullanarak bazı hatalar vardı ... i yerel js kullanarak endup

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



2

Bence önemli bir husus eksik:

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

yalnızca bir Kimlik seçici (#) olduğunda çalışır

sınıf seçici için yerel değeri kullanma seçeneği vardır:

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

1

Kabul edilen cevap benim için çalışıyor, ancak ancak kodun sayfa yüklenmesini bitirdikten sonra yürütmem gerektiğini fark ettikten sonra. Bu durumda satır içi komut dosyası çalışmadı, sanırım #my_form henüz yüklenmedi.

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

pdub23, kabul edilen cevabı her zaman yeni bir cevap oluşturmaktan daha iyi yorumlamak daha iyidir…
Fábio Batista

1

Aşağıdaki snippet'i bile kullanabilirsiniz.

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

1

Sayfada JQuery v1.4.4 olduğunda, bunların hiçbiri işe yaramadı. Sayfama JQuery v1.7.1 enjekte ederken, sonunda çalıştı. Benim durumumda, soruna neden olan JQuery sürümüm oldu.

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

Ben kullanılan ettik $(textarea).val/html/text(any_str_var)bütün benim için çalıştı. Dize olarak değişkeninizin textarea'ya eklendiğinden emin olmak istiyorsanız, her zaman şu şekilde concat yapabilirsiniz:

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

.val () yöntemi textarea'da kesinlikle kullanılır - bkz. https://api.jquery.com/val/

.html () herhangi bir öğenin içeriğini almak veya ayarlamak için kullanılabilir - bkz: https://api.jquery.com/html/#html2

.text (), XML içeriğini ayarlamak için kullanılabilmesi dışında .html ile aynıdır: bkz. - https://api.jquery.com/text/#text-text

Ayrıca, her birinin bu bağlantıların her biri ile özel karakterler üzerinde nasıl hareket ettiği hakkında daha fazla bilgi edinebilirsiniz.


0

Sadece bu kodu kullanın ve her zaman şu değere sahip olacaksınız:

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

Böylece val () 'i kontrol eder ve değerini ayarlar. Val () boş bir dize, NULL, NaN os alırsa html () ve sonra text () olup olmadığını kontrol eder ...


0

Bu çalışıyor:

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

Unutmayın, buradaki zor kısım doğru kimliği kullandığınızdan emin olmaktır. Ve kimliği kullanmadan önce kimliğinizden #önce koyduğunuzdan emin olun .


0

Veritabanından veri kullanırken sorun $("textarea#ExampleMessage").html('whatever you want to put here');yaşayabileceğiniz için kullanmak iyi bir yol .val()olabilir.

Örneğin:

Adında bir veritabanı alanı descriptionaşağıdaki değere sahiptir asjkdfklasdjf sjklñadf. Bu durumda, textarea'ya değer atamak için .val () kullanmak sıkıcı bir iş olabilir.


0

JQuery kullanarak değer / metin / html ayarlamak denedim ama başarılı olmadı. Bu yüzden aşağıdakileri denedim.

Bu durumda DOM oluşturulduktan sonra yeni textarea öğesi enjekte ediyordum.

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

resim açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.