从选择中的所选项目更改文本区域的文本

时间:2012-03-15 17:26:38

标签: javascript jquery

我有这个功能,当选择被更改时,用select中的文本成功填充textarea。

function Favourites()
{
  $('select#favourites').change(function() {
    var text = $(this).find('option:selected').attr('data-post');
    $('textarea#post').text(text);
  });
}

问题是如果我更改选择,删除textarea的内容,然后再次更改选择,它就不再填充textarea。

有什么好主意的吗?

4 个答案:

答案 0 :(得分:2)

您需要使用.val()代替.text()

 $('#post').val(text);

演示:http://jsfiddle.net/jtbowden/HaZWC/

.text()基本上在标记<textarea></textarea>之间设置文本,用于设置textarea的默认值。只要用户没有在文本框中输入任何内容,这就没问题了。但是,就像在html中执行<textarea>My Text</textarea>一样,默认值总是被用户输入的内容覆盖。因为这是一个输入,.val()函数设置输入的实际值,它会覆盖默认值。

答案 1 :(得分:2)

更改功能是否在Favourites功能内?您只需在DOM就绪函数中使用它,如下所示:

$(document).ready(function(){

    $('select#favourites').change(function() {
        var text = $('option:selected', this).attr('data-post');
        $('textarea#post').val(text);
    });

});

我也改变了:

  • .text.val,它将始终正确更改表单字段值
  • 已删除find并替换为在this内搜索的方法:$('option:selected', this)

这是一个jsFiddle给你:http://jsfiddle.net/sp5L4/2/

答案 2 :(得分:1)

尝试使用on()(新live())之类的内容,同时使用val()而不是text()。或许也可以使用data()

$(document).on('change', 'select#favourites', function() {
    var text  = $(this).find('option:selected').data('post');
    $('textarea#post').val(text);
});

答案 3 :(得分:0)

使用'on'方法在整个DOM中附加/侦听事件处理程序。

$('select#favourites').on('change', function(){
  var text = $(this).find('option:selected').attr('data-post');
  $('textarea#post').text(text);
});