在jQuery中设置textarea的值

GON*_*ale 511 jquery textarea

我试图使用jquery在textarea字段中设置一个值,代码如下:

$("textarea#ExampleMessage").attr("value", result.exampleMessage);
Run Code Online (Sandbox Code Playgroud)

问题是,一旦执行此代码,它不会改变textarea中的文本?

但是,当执行alert($("textarea#ExampleMessage").attr("value"))新设置的值时会返回?

eno*_*rev 850

你试过val吗?

$("textarea#ExampleMessage").val(result.exampleMessage);
Run Code Online (Sandbox Code Playgroud)

  • 是啊.textarea没有value属性,而输入则有. (61认同)
  • textarea具有值(JavaScript)属性,就像文本输入一样.它没有HTML`value`属性,但这并不重要,因为`val()`和`attr('value')`都写入JavaScript值属性.注意,`attr()`不*设置HTML属性!它只设置JavaScript属性,同时试图隐藏名称不同的类/ className之类的情况.但是,您仍然会看到属性和属性执行不同操作的位置的区别,例如表单元素. (17认同)
  • 同意,但val()在这个例子中设置它.他们[jquery]必须确定它的textarea类型并设置文本. (14认同)
  • 大多数情况下都是如此,虽然val确实需要时间来确保你设置的值是一个字符串,并且attr似乎总体上更有魔力. (5认同)
  • `val(foo)`适合我(jQuery 1.9.1).使用`text(foo)`丢失更新textarea内容会丢失IE上的换行符,使用`val(foo)`保留它们. (2认同)

dan*_*tin 74

Textarea没有值属性,它的值介于标签之间,即:<textarea>my text</textarea>,它不像输入字段(<input value="my text" />).这就是为什么attr无效:)


Cal*_*aNN 49

$("textarea#ExampleMessage").val() 在jquery只是一个魔术.

你应该注意到textarea标签使用内部html显示而不是value属性就像输入标签一样.

<textarea>blah blah</textarea>
<input type="text" value="blah blah"/>
Run Code Online (Sandbox Code Playgroud)

你应该用

$("textarea#ExampleMessage").html(result.exampleMessage)
Run Code Online (Sandbox Code Playgroud)

要么

$("textarea#ExampleMessage").text(result.exampleMessage)
Run Code Online (Sandbox Code Playgroud)

取决于您是否要将其显示为html标签或纯文本.

  • 它不叫魔术,它叫做抽象.textarea只有1和0,但计算机中的所有抽象层都隐藏了这些.可以指出它,但请不要因为这样的原因而要求人们为其他答案投票... :) (16认同)
  • 注意 - html()执行脚本标记. (8认同)
  • 来自[jQuery API](http://api.jquery.com/text/)“无法在表单输入或脚本上使用.text()方法。要设置或获取输入或textarea元素的文本值,请使用.val()方法。要获取脚本元素的值,请使用.html()方法。” (3认同)

小智 17

噢,来吧男孩!它适用于

$('#your_textarea_id').val('some_value');
Run Code Online (Sandbox Code Playgroud)


小智 15

我认为这应该有效:

$("textarea#ExampleMessage").val(result.exampleMessage);
Run Code Online (Sandbox Code Playgroud)


Mic*_*hel 10

我有同样的问题所以我决定在当前的浏览器中尝试它(我们在这个问题之后的一年半之后),并且这个(.val)有效

$("textarea#ExampleMessage").val(result.exampleMessage); 
Run Code Online (Sandbox Code Playgroud)

对于

  • IE8
  • FF 3.6
  • FF4
  • 歌剧11
  • Chrome 10


小智 8

我有同样的问题,这个解决方案不起作用,但有用的是使用HTML

$('#your_textarea_id').html('some_value');
Run Code Online (Sandbox Code Playgroud)

  • 不,`html()`每个textarea只工作一次,下次你想动态改变`textarea`的内容,`html()`不起作用...... (3认同)

Dan*_*ana 8

在android上.val.html没有奏效.

$('#id').text("some value")
Run Code Online (Sandbox Code Playgroud)

做了这个工作.

  • 来自 [jQuery API](http://api.jquery.com/text/) “.text() 方法不能用于表单输入或脚本。要设置或获取输入或 textarea 元素的文本值,请使用.val() 方法。要获取脚本元素的值,请使用 .html() 方法。” (2认同)

小智 5

有问题:我需要从给定div的包含生成html代码.然后,我必须将这个原始的html代码放在textarea中.当我使用函数$(textarea).val()时:

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

要么

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

当它们介于quot之间时,我遇到了一些特殊字符(&'")的问题.但是当我使用函数时:$(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>
Run Code Online (Sandbox Code Playgroud)

并且无法填充textarea的javascript/jquery代码是:

function onGenHtml(){
  $('#idTxtArGenHtml').html( $("#idDivMain").html()  );
}
Run Code Online (Sandbox Code Playgroud)

最终的解决方案:

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

诀窍是使用span标记包裹textarea来帮助替换replaceWith函数.我不确定它是否非常干净,但它的工作也很完美,在textarea中添加原始html代码.


Luk*_*ili 5

textarea不会将值存储为

<textarea value="someString">
Run Code Online (Sandbox Code Playgroud)

而是以以下格式存储值:

<textarea>someString</textarea>
Run Code Online (Sandbox Code Playgroud)

因此attr("value","someString"),您可以得到以下结果:

<textarea value="someString">someOLDString</textarea>.
Run Code Online (Sandbox Code Playgroud)

尝试$("#textareaid").val()还是$("#textareaid").innerHTML代替。


小智 5

文本区域没有价值.jQuery .html()适用于这种情况

$("textarea#ExampleMessage").html(result.exampleMessage);
Run Code Online (Sandbox Code Playgroud)

  • 不,`html()`每个文本区域只能工作一次,下次您要动态更改`textarea`的内容时,`html()`将无法工作... (2认同)

use*_*569 5

我认为缺少一个重要的方面:

$('#some-text-area').val('test');
Run Code Online (Sandbox Code Playgroud)

仅当有 ID 选择器 (#) 时才有效

对于类选择器,可以选择使用本机值,例如:

$('.some-text-area')[0].value = 'test';
Run Code Online (Sandbox Code Playgroud)