2009-04-24 54 views
3

我有一個MultiLine asp:Textbox(一個標準的html文本框,適用於那些非asp用戶),我希望自動調整大小以僅通過CSS來適應所有內容。這是因爲我希望它在Web瀏覽器中具有指定的高度,並且啓用了滾動功能。Autosize文本區域(多行asp:TextBox)

但是我實現了一個打印樣式表,並且希望在打印時不顯示溢出的情況下顯示位於textarea中的所有文本。

我可以手動指定與此是該領域是可選的,一個350像素的空白框不是最佳的,總有比這更大的文字量的可能性print.css文件問題textarea的高度

height: auto; 
height: 100%; 

在IE和Firefox分別然而這些似乎被指定的行數在HTML標記爲形式,其必須存在來覆蓋:...

我已經嘗試使用當你沒有在asp:Textbox標籤上指定高度時,由.NET生成,這似乎只接受商業測量結果su ch像px em等...

任何想法?

回答

2

你所要求的(一個CSS解決方案)是不可能的。

textarea的內容不是html元素,所以它不能被css用來計算textarea的大小。

唯一可以工作的是Javascript,讀取scrollHeight屬性並使用它來設置元素的高度。仍然scrollHeight屬性是非標準的,所以它可能不適用於所有瀏覽器。

+0

我曾懷疑這:(:(謝謝澄清! – 2009-04-24 16:09:42

+0

...也,在使用updatepalel時不可能在JavaScript和jQuery中。 – 2015-10-06 20:20:33

1

的jQuery或JavaScript函數來找到並文本框更大的可能是最好的解決方案 - 至少我是這麼發現

我們使用這套功能和呼叫乾淨的形式在頁面加載後(我知道這在這裏並不是最好的解決方案,並且正在轉移到更優雅的jQuery解決方案) - 一個注意確保您的textareas具有指定的行和列,或者它不適用。

function countLines(strtocount, cols) 
{ 
    var hard_lines = 1; 
    var last = 0; 
    while (true) 
    { 
     last = strtocount.indexOf("\n", last + 1); 
     hard_lines++; 
     if (last == -1) break; 
    } 
    var soft_lines = Math.round(strtocount.length/(cols - 1)); 
    var hard = eval("hard_lines " + unescape("%3e") + "soft_lines;"); 
    if (hard) soft_lines = hard_lines; return soft_lines; 
} 

function cleanForm() 
{ 
    var the_form = document.forms[0]; 
    for (var i = 0, il = the_form.length; i < il; i++) 
    { 
     if (!the_form[i]) continue; 
     if (typeof the_form[i].rows != "number") continue; 
     the_form[i].rows = countLines(the_form[i].value, the_form[i].cols) + 1; 
    }  
    setTimeout("cleanForm();", 3000); 
} 
+0

謝謝,這會工作,但我需要的是CSS只因爲我說我只希望它影響到打印介質,而不是被渲染成例如在瀏覽器中。 – 2009-04-24 16:06:05

0

如果您將行設置爲一個可笑的高數字,CSS高度規則應該在屏幕上覆蓋它。

然後在打印樣式表中將高度設置爲自動。這可能會導致一些大的空白空間,所有可用的行都沒有填滿,但至少所有文本都可見。