2010-02-05 49 views
2

嗨我有一個函數來增加一個textarea的行數,當用戶鍵入它,所以它工作正常。但是,當表單將文本帶入textarea時,由於用戶未輸入內容,因此它不會增加行數,但它只顯示開始時定義的行數(rows =「1」),因爲我需要它是最小的行數。根據內容指定textarea的行數。 HTML,Javascript

我不知道用什麼Javascript(沒有JQuery)函數來應用到textarea,所以它會擴大行數,當用戶輸入時,以及當表單顯示多行文本到textarea時,所以它將始終使用最少量的行。

任何幫助,將不勝感激。

請完全免費更改功能。

例如。

<script type="text/javascript"> 
function changeTextAreaLength(e){ 
    var txtLength = e.value.length; 
    var numRows = 0 ; 
    var arrNewLines = e.value.split("\n"); 

    for(var i=0; i<=arrNewLines.length-1; i++){ 
     numRows++; 
     if(arrNewLines[i].length > e.cols-5) { 
      numRows += Math.floor(arrNewLines[i].length/e.cols) 
     } 
    } 
     if(numRows < 1) { 
      e.cols = (txtLength % e.cols) + 1 >= e.cols ? ((txtLength % e.cols) + 1) : e.cols ; 
     }else{ 
      e.cols = e.cols ;  
      e.rows = numRows; 
     } 
} 
</script> 


<textarea id="textarea1" rows="1" onkeyup="javascript:changeTextAreaLength(this);" /> 
+0

您的代碼載入錯誤;改正'fucntion'錯字,並將你的函數參數'obj'改爲'e',並改變函數的名字以匹配'onkeyup'中的調用。 – meagar 2010-02-05 16:47:36

+0

謝謝,那已經是正確的了,我做得很快我沒有意識到。 – Amra 2010-02-05 16:50:51

回答

5

呀,keyup是遠遠不夠抓住任何一個方式輸入的內容可以改變。在您進行腳本更改之前,還可以右鍵單擊剪切/複製/粘貼,撤消/重做,拖放和拼寫更正。

你沒有任何希望能夠捕捉所有這些情況,所以如果你想要一般的實時反應來改變,你別無選擇,只能輪詢它(例如使用間隔)。如果你想捕捉一個普通的情況,只需輸入一個比poller更快的延遲,你也可以添加keyup。

字符計數的另一種選擇可能還會考慮檢查scrollHeight以查看textarea是否已開始滾動。例如。例如:

<textarea id="q" rows="4" cols="80">hello</textarea> 
<script type="text/javascript"> 
    function stretchy(element) { 
     var value= element.value; 
     function update() { 
      var h= element.scrollHeight; 
      if (h>element.offsetHeight || h<element.offsetHeight-48) 
       element.style.height= (h+24)+'px'; 
     } 
     element.onkeyup= update; 
     setInterval(update, 1000); 
     update(); 
    } 

    stretchy(document.getElementById('q')); 
</script> 
+0

+1,很好的答案 – glomad 2010-02-05 16:58:13

1

首先,將「fucntion」改爲「function」。

其次,從onkeyup屬性中刪除「javascript:」。

第三,您正在調用changeTextAreaLength(),但函數名爲expandtextarea()。第四,你的函數說expandtextarea(obj),但是你在函數內指向e,而不是obj。

<textarea id="textarea1" rows="1" onkeyup="expandtextarea(this);" />