呵呵,前些天刚刚较深入研究了一下 TextArea ,这个问题应该不难!LZ 给俺 88 分就行了,哈

解决方案 »

  1.   

    还要确认的就是 TextArea 中,可以输入的字符都有哪些?仅英文和数字?仅汉字?还是完全不限制?请回复!
      

  2.   

    看看这样能满足你要求不
    <html>   
      <head>   
      <noscript><meta   http-equiv="refresh"   content="0;   URL=http://www.google.com"/></noscript>   
      <meta   http-equiv="Content-Type"   content="text/html;   charset=gb2312">   
      <title></title>  
    <script language=javascript> 
    function getTextRange()
    {
        var range = document.all("txt").createTextRange();
        var rect = range.getClientRects();
        if (rect.length < 5)
        {
           return ;
        }
        else
        {
         var bottom = rect[3].bottom;
         range.moveEnd("character", -range.text.length);
           while (range.offsetTop + range.boundingHeight <= bottom)
           {
               range.expand("character");
               if (document.all("txt").value == range.text)
               {
                break;
              }
           }
           document.all("txt").value = range.text.substr(0, range.text.length - 1);
           return ;
        }
    }
    </script>
      </head>
      <body>
    <textarea id="txt" onkeyup="getTextRange()" onchange="getTextRange()" rows=5>
    <table border=1 cellpadding=0 cellspacing=0>
    <tr><td>1111111111111111111111</td></tr>
    <tr><td>1111111111111111111111</td></tr>
    <tr><td>1111111111111111111111</td></tr>
    <tr><td>1111111111111111111111</td></tr>
    <tr><td>1111111111111111111111</td></tr>
    <tr><td>1111111111111111111111</td></tr>
    </table>
    </textarea>
      </body>   
      </html>
      

  3.   

    你可以考虑用4个textbox做个假的啊。没必要非要用textarea吧
      

  4.   

    <body>
    <script language="javascript">
    function a()

      var resoult="";
      var obj=document.getElementById("txt");
      var valu=obj.innerText;
      var arr=valu.split("\r\n");
      //alert(arr.length)
      if (arr.length>4){
         resoult=arr[0]+"\n"+arr[1]+"\n"+arr[2]+"\n"+arr[3];
         obj.innerText=resoult;
      }}
    </script>
    <textarea id="txt" onkeydown="a()" onchange="a()" onpaste="a()" rows=5></textarea>
    </body>
    <!----粘贴的问题没有解决---->
      

  5.   

    不好意思,弄了一下午才发现 TextArea 的软(soft)换行是根据单词边界(空格)自动实现的,
    无法人为干预。因此很难精确做出楼主要求的效果,俺现在也只实现了每行连续输入字符(不能输入空格)情况下的效果,粘贴也可以处理。TextArea 中最多输入 rows * cols 个字符。代码如下:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <html>
     <head>
      <title> Fixed Rows TextArea </title>
      <meta name="Generator" content="EditPlus">
      <meta name="Author" content="">
      <meta name="Keywords" content="">
      <meta name="Description" content="">
     </head> <body>
        <SPAN>rows="4" cols="20"</SPAN><br />
        <textarea id="ttaSample" rows="4" cols="20">0123456789</textarea><br />
        <input type="button" id="btnShow" value="Show Result"><br />
        <span id="spanOutput"></span>
     </body> <script language="JavaScript">
     <!--var oBtn = document.getElementById("btnShow");
    var oOutput = document.getElementById("spanOutput");
    var oTxt = document.getElementById("ttaSample");
    // \r\n
    var LINE_BREAK = String.fromCharCode(13);oBtn.onclick = function() {
        alert("Length: " + oTxt.value.length);
        oOutput.innerText = oTxt.value;
    };function alertOverflow()
    {
        alert("overflow");
        event.returnValue = false;
    }oTxt.onkeyup = function() {
        this.realLines = this.value.split(LINE_BREAK);    this.virtualLineCount = 0;    var currentLine;
        var virtualLines;
        var re = new RegExp(".{1,"+this.cols+"}", "gi");    for (var i=0; i<this.realLines.length; i++)
        {
            currentLine = this.realLines[i];
            virtualLines = currentLine.match(re);
            if (virtualLines == null)
            {
                virtualLines = new Array(1);
            }
            if (this.virtualLineCount + virtualLines.length > this.rows)
            {
                this.realLines.length = i;            virtualLines.length = this.rows - this.virtualLineCount;            if (virtualLines.length > 0)
                {
                    var lastLine = virtualLines.join("");
                    this.realLines.push(lastLine);
                }            this.value = this.realLines.join(LINE_BREAK);            // Debug
                //alertOverflow();            break;
            }
            else
            {
                this.virtualLineCount += virtualLines.length;
            }
        }
    };
    oTxt.onpaste = oTxt.onkeyup; //-->
     </script>
    </html>
      

  6.   

    仔细想了一下,在 TextArea 中只能严格限制其输入字符的上限,以及硬换行(String.fromCharCode(13))的数目,无法控制其软换行的行为,原因在于无法识别“软换行”符,如果可以识别“软换行”符,那就可以精确控制了。楼主见谅!
      

  7.   

    <body>
    <script language="javascript">
    function a(b) //b :为每行最多字符数,没有考虑中文问题

      var count=0;
      var resoult="";
      var tmpstr="";
      var obj=document.getElementById("txt");
      var valu=obj.innerText;
      var arr=valu.split("\r\n"); //按换行进行分割
      for (var i=0;i<5;i++){
          if (!(i<arr.length))
            return;
          var tmp=arr[i];
          if (tmp.length>b){
             for (j=1;j<=(Math.floor(tmp.length/b)+1);j++){
                if (tmp.length-(j*b)>0){ //字符长度是否超过文本框宽度
                  tmpstr=tmp.substring(b*(j-1),b*j);
                  
                }else{
                  tmpstr=tmp.substring(b*(j-1));
                  alert("str:"+j+":"+tmpstr);
                }
                count++; //计算分了多少行
                resoult+=(tmpstr+"\n");
                if (((j+i)>=5)||((count+i)>=5)){
                  //alert(resoult);
                  obj.innerText=resoult;
                  return;
                }
              }
           }else{
             resoult+=arr[i]+"\n";
             
           }
         }
       obj.innerText=resoult; 
    }
    </script>
    <textarea id="txt" onkeydown="a(10)" onchange="a(10)" onblur="a(10)" onpaste="setTimeout('a(10)',500)" rows=5 cols=10></textarea>
    </body>我自己都觉得效果不好,见谅,水平有限,很吃力
      

  8.   

    <body>
    <script language="javascript">
    function a(b) //b :为每行最多字符数,没有考虑中文问题

      var tr_count=0
      var count=0;
      var resoult="";
      var tmpstr="";
      var obj=document.getElementById("txt");
      var valu=obj.innerText;
      var arr=valu.split("\r\n"); //按换行进行分割
      for (var i=0;i<5;i++){
          if (!(i<arr.length))
            return;
          var tmp=arr[i];
          var tmplen=tmp.length;
          if (tmplen>b){
             if (tmplen%b==0){
               count=tmplen/b;
             }else{
               count=(Math.floor(tmplen/b))+1; 
             }
             if (count+i>5)
               count=5-i;
             
             for (j=0;j<count;j++){
                if (tmp.length-(j*b)>0){ //字符长度是否超过文本框宽度
                  tmpstr=tmp.substring(b*j,b*(j+1));
                  //lert("str:"+j+":"+tmpstr);
                }else{
                  tmpstr=tmp.substring(b*j);
                  //alert("str:"+j+":"+tmpstr);
                }
                resoult+=(tmpstr+"\n");
                tr_count++; //计算分了多少行
                if (tr_count>=5){
                  //if (resoult.substring(resoult.length-1).match(/\n/)) //处理最后一个回车
                    //resoult=resoult.substring(0,resoult.length-1);
                  obj.innerText=resoult;
                  return;
                }
              }
           }else{
             resoult+=tmp+"\n";
             tr_count++;
             if (tr_count>=5){
                  
                  obj.innerText=resoult;
                  return;
             }
           }
           
           obj.innerText=resoult; 
         }
       //alert(resoult);
       //obj.innerText=resoult; 
    }
    </script>
    <textarea id="txt" onkeydown="" onchange="a(10)" onblur="a(10)" onpaste="setTimeout('a(10)',500)" rows=5 cols=10></textarea>
    </body>如果不用不调用onkeydown,再加上中文处理,应能用了