2011-11-25 68 views
2

我有一个textarea,它是在成功的AJAX调用之后创建的。它可能包含相当多的文本,我希望自动设置高度以便在不滚动的情况下可以看到整个文本。jQuery自动调整预加载的textarea加载

我正在使用autoResize插件(http://james.padolsey.com/javascript/jquery-plugin-autoresize/),但它只调整用户输入的输入大小。

那么,我如何调整一个textarea的大小,使它适合它所包含的文本呢?

下面是相关函数的代码(VAR类型可以是“输入”或“文本域”)

function edit_create_input(name, value, type, autocomplete, autoresize) 
    { 
    var input=$('<' + type + ' class="edit-"' + name + ' name="'+name+'">').val(value); 
    if (autocomplete) 
     { 
     input.autocomplete("ajax.autosuggest.php",{'multiple':true}); 
     } 
    if (autoresize) 
     { 
     input.autoResize(); 
     } 
    return input; 
+0

你能告诉我们你当前的源代码吗?有时将解决方案置于眼前。永远记住这句话:“一张图片说超过千言万语。” – reporter

+0

也许调整插件代码?代码非常简单,并且不是很长。 –

+0

我添加了我的代码的相关部分。不幸的是,我对JS和jQuery并不擅长,所以现在修改插件代码对我来说有点太难了。 – sbichenko

回答

3

plugin source 有在其上触发updateSize()功能3个事件:

// Bind namespaced handlers to appropriate events: 
textarea 
    .unbind('.dynSiz') 
    .bind('keyup.dynSiz', updateSize) 
    .bind('keydown.dynSiz', updateSize) 
    .bind('change.dynSiz', updateSize); 

您应该触发这些阿贾克斯后一个加载内容:

$("#my_textarea").trigger('change.dynSiz'); 

编辑:根据您的代码

// ... 
if (autoresize) 
{ 
    input.autoResize(); 
    input.trigger('change.dynSiz'); 
} 
// ... 

注意:在使用.trigger()与命名空间的事件更方便,因为使用.change()(这也是不错的),会触发每一个变化事件绑定到物体,而不仅仅是你需要的物体。

更新:旧的插件源不再可用,我只能找到原始here的稍微修改版本。

+0

这似乎并不奏效。难道是因为该元素实际上不在DOM那一刻?编辑:不,即使我试着这个元素实际上追加后,它仍然无法正常工作。我试着在jFiddle中测试这个,但是我无法让它在那里工作。 – sbichenko

+0

在插件主页上有一条评论(最后一条),其中有人想要做你想做的事情,他只是使用'.keydown()'来触发事件。你能链接你的小提琴吗? – aorcsik

+0

我做到了!原来我们有不同的源代码(我有更新的,来自https://github.com/padolsey/jQuery.fn.autoResize)。它有不同的触发器,所以'.trigger('change.autoResize')'为我做了!但是,我认为这对我来说似乎有些破绽,所以在接受这个之前我会稍微等待一些其他答案。 – sbichenko