jQuery在加载时自动调整预填充的textarea

时间:2011-11-25 10:16:45

标签: javascript jquery textarea autoresize

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

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

那么,我如何调整textarea的大小以使其适合它包含的文本?

以下是相关函数的代码(var类型可以是'input'或'textarea')

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;

1 个答案:

答案 0 :(得分:3)

plugin source 中有3个事件触发了updateSize()函数:

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

你应该在ajax加载内容后触发其中一个:

$("#my_textarea").trigger('change.dynSiz');
根据您的代码

修改

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

注意:.trigger()与命名空间事件一起使用会更方便,因为使用.change()(这也很好)会触发每个更改事件绑定到对象,而不仅仅是你需要的对象。

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