2011-11-25 34 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