Встановити значення textarea в jQuery


525

Я намагаюся встановити значення в полі текстової області за допомогою jquery із наступним кодом:

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

Проблема полягає в тому, що після виконання цього коду він не змінює текст у текстовій області?

Однак при виконанні alert($("textarea#ExampleMessage").attr("value"))знову встановленого значення повертається?


3
Якщо магія jQuery не працює для встановлення val () на <textarea>, а ви орієнтуєтесь на ідентифікатор, швидше за все, існує декілька елементів з тим самим ідентифікатором.
billrichards

Відповіді:


877

Ви пробували валь?

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

5
здебільшого вірно, хоча val займає час, щоб переконатися, що значення, яке ви встановлюєте, є рядком, і attr, здається, робить трохи більше магії загалом.
Енобрев

62
Так. У текстовій області немає атрибута значення, а введення - це.
MDCore

14
Погоджено, але val () встановлює це в цьому випадку. Вони [jquery] повинні визначити тип текстової області та встановити текст.
GONeale

17
textarea має властивість (JavaScript) як і введення тексту. У нього немає valueатрибута HTML , але це не має значення, оскільки обидва val()і attr('value')записують у властивість значення JavaScript. Зверніть увагу, attr()це НЕ набір HTML - атрибути! Він встановлює лише властивості JavaScript, намагаючись приховати різницю для таких випадків, як class / className, де назва відрізняється. Але ви все одно побачите різницю в місцях, де атрибут та властивість роблять різні речі, наприклад, у елементах форми.
bobince

2
val(foo)працює для мене (jQuery 1.9.1). Використовуючи text(foo)програші для оновлення вмісту текстових областей, вони втрачають рядкові рядки на IE, використовуючи val(foo)їх збереження.
Тим

77

Textarea не має атрибута значення, його значення походить між тегами, тобто: <textarea>my text</textarea>воно не схоже на поле введення ( <input value="my text" />). Ось чому attr не працює :)


50

$("textarea#ExampleMessage").val() в jquery просто магія.

Ви повинні помітити, що тег textarea, що використовує внутрішній html для відображення, а не в атрибуті значень, як і тег вводу.

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

Ви повинні використовувати

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

або

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

залежить від того, чи хочете ви відображати його як HTML-теги чи звичайний текст.


1
Ви маєте рацію, textarea не має значення або значення, а jquery просто робить якусь магію, щоб полегшити життя розробнику.
Скотт Кірквуд

16
Це не називається магією, це називається абстракцією. textarea - лише 1 і 0, але всі шари абстракції на вашому комп'ютері приховують це для вас. Добре це зазначити, але, будь ласка, не вимагайте, щоб люди з такої причини зволікали з іншими відповідями ... :)
Еспен Герсет Халворсен

8
будьте обережні - html () виконує теги сценаріїв.
Лінкольн Б

3
З API jQuery "Метод .text () не можна використовувати для входів форми або скриптів. Щоб встановити або отримати текстове значення елементів вводу або textarea, використовуйте метод .val (). Щоб отримати значення елемента сценарію, використовуйте метод .html (). "
пілот

20

Ой давай хлопці! це працює просто з

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

Тільки якщо ви використовуєте селектор ідентифікаторів. Я не можу як мій код, створений стороною стороною
Джек

16

Я думаю, що це має спрацювати:

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

10

У мене було те саме запитання, тож я вирішив спробувати його в поточних браузерах (ми пізніше півтора року після цього питання), і це ( .val) працює

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

для

  • IE8
  • FF 3.6
  • FF4
  • Опера 11
  • Chrome 10

1
Для запису, одна з виняткових функцій jQuery - це сумісність із браузером, так що так, цілком ймовірно, що .val()він зробить свою магію в декількох браузерах;)
diosney,

9

На android .valі .htmlне працював.

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

зробив роботу.


1
З API jQuery "Метод .text () не можна використовувати для входів форми або скриптів. Щоб встановити або отримати текстове значення елементів вводу або textarea, використовуйте метод .val (). Щоб отримати значення елемента сценарію, використовуйте метод .html (). "
пілот

8

У мене була така ж проблема, і це рішення не працювало, але те, що працювало, було використовувати html

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

3
ні, html()працює лише один раз на textarea, наступного разу, коли ви хочете динамічно змінити вміст textarea, html()не вийде ...
Legionar

@Legionar тоді як впоратися з цією справою?
Джаванд Сінгх

ну, це допомогло мені stackoverflow.com/questions/1219860/…, використовуючи ці функції, я просто встановив закодоване значення в textarea, використовуючи$('#textarea').val(encodedtext);
Jawand Singh

5

У цьому проблема: мені потрібно генерувати html-код із вмісту даного діва. Тоді я маю помістити цей сирий html-код у текстовій області. Коли я використовую функцію $ (textarea) .val (), як це:

$ (textarea) .val ("деякий html на зразок <type type = 'text' value = '' style =" background: url ('http://www.w.com/bg.gif') center-x center; "/> бла-бла");

або

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

У мене виникли проблеми з деяким спеціальним символом (& '"), коли вони знаходяться між". Але коли я використовую функцію: $ (textarea) .html (), текст нормально.

Є приклад форми:

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

І код JavaScript / jquery, який не працює для заповнення текстової області, є:

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

Нарешті рішення:

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

Трюк - обернути текстові області тегом "span", щоб допомогти з функцією substituWith. Я не впевнений, чи він дуже чистий, але він ідеально працює, також додайте код HTML у текстовій області.


5

textarea не зберігає значення як

<textarea value="someString">

натомість він зберігає значення у такому форматі:

<textarea>someString</textarea>

Отже, attr("value","someString")ви отримуєте цей результат:

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

спробуйте $("#textareaid").val()або $("#textareaid").innerHTMLзамість цього.


5

Текстова область не має значення. jQuery .html () працює в цьому випадку

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

2
ні, html()працює лише один раз на textarea, наступного разу, коли ви хочете динамічно змінити вміст textarea, html()не вийде ...
Legionar

а якщо ви зробили .empty (). html ('newContent') @Legionar?
VH


3

Щоб встановити значення textarea кодованого HTML (щоб показати як HTML), ви повинні використовувати .html( the_var ) але як зазначено, якщо ви спробуєте встановити його ще раз, він (і, ймовірно) не працюватиме.

Ви можете виправити це, вилучивши текстову область .empty()та знову встановивши її.html( the_var )

Ось робочий 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

Я спробував .val() .text() .html()і мав деякі помилки, використовуючи jQuery для читання або встановлення значення textarea ... я закінчую за допомогою рідного js

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

2

Для встановлення значень ми можемо використовувати методи .val () або .text (). нам потрібно поставити значення всередині val (), як val ("привіт").

  $(document).ready(function () {
    $("#submitbtn").click(function () {
      var inputVal = $("#inputText").val();
      $("#txtMessage").val(inputVal);
    });
  });

Перевірте приклад тут: http://www.codegateway.com/2012/03/set-value-to-textarea-jquery.html



2

Я думаю, що є один важливий аспект:

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

працює лише за наявності перемикача ідентифікаторів (#)

для вибору класу існує можливість використовувати нативне значення, наприклад:

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

1

Прийнята відповідь працює для мене, але лише після того, як я зрозумів, що повинен був виконати свій код після завантаження сторінки. У цій ситуації вбудований сценарій не працював, я думаю, тому що #my_form ще не виконано завантаження.

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

pdub23, завжди краще коментувати прийняту відповідь, ніж створювати нову відповідь…
Фабіо Батіста,

1

Ви навіть можете використовувати фрагмент нижче.

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

1

Коли у мене на сторінці був JQuery v1.4.4, жоден з них не працював. При введенні JQuery v1.7.1 на мою сторінку, вона працювала нарешті. Тож у моєму випадку саме причиною проблеми стала моя версія JQuery.

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

Я використав $(textarea).val/html/text(any_str_var)все, що працювало для мене. Якщо ви хочете бути впевнені, що ваша змінна як рядок додана до текстової області, ви завжди можете конкретувати так:

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

Метод .val (), безумовно, використовується на textarea - дивіться: https://api.jquery.com/val/

.html () можна використовувати для отримання або встановлення вмісту будь-якого елемента - див .: https://api.jquery.com/html/#html2

.text () - це те саме, що .html, за винятком того, що це можна використовувати для встановлення XML-вмісту: див. - https://api.jquery.com/text/#text-text

Ви також можете прочитати більше про те, як кожен діяти на особливих символів з кожним із цих посилань.


0

Просто використовуйте цей код, і ви завжди матимете значення:

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

Так він перевірить val () і встановить його значення. Якщо val () отримує порожній рядок, NULL, NaN os, він перевірить на html (), а потім на text () ...


0

Це працює:

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

Пам'ятайте, що тут складною частиною є використання правильного ідентифікатора. І перш ніж використовувати ідентифікатор, переконайтеся, що ви поставили #його перед цим.


0

Використання $("textarea#ExampleMessage").html('whatever you want to put here');може бути хорошим способом, тому що.val() може виникнути проблеми при використанні даних із бази даних.

Наприклад:

Поле бази даних з ім'ям descriptionмає наступне значення asjkdfklasdjf sjklñadf. У цьому випадку використання .val () для присвоєння значення textarea може бути копіткою роботою.


0

Я намагався встановити значення / text / html за допомогою JQuery, але це не вдалося. Тому я спробував наступне.

У цьому випадку я вводив новий елемент textarea до створеного після DOM.

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

введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.