文本域我想限制用户只输入100个字节的大小:当到这个大小时就不能输入了 
我写了这样一个页面,但一直有错 请大家运行下帮我解决下这个问题,谢谢了!
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script type="text/javascript">
//计算长度
function getLength(str)
{
 var i=0;
 for(var j=0;j<str.length;j++)
 {
 if(str.charCodeAt(j)<0||str.charCodeAt(j)>255)
 {
  i+=2;  
 }
 else
 {
 i++;  
 }
 }
 return i;
}</script>
<SCRIPT language="javascript">
function TxtMaxlength(MaxCount){
var Objs=document.getElementById("TRecontent");  //取文本域对象
var ObjCou=getLength(Objs.value);           //取文本域长度
//var ObjCou=Objs.value.length; 
  form1.YesCou.value=ObjCou+"/100";
  
  if (ObjCou > MaxCount)
  {
  //操作指定大小把值重新赋值
    Objs.value=Objs.value.substr(0, MaxCount);
  }
}
</SCRIPT>
</head><body>
<FORM method="POST" name="form1">
<input name=YesCou size=4 value=0 readonly><BR>
<TEXTAREA name="TRecontent" id="TRecontent" rows="5" cols="50" onPropertyChange="TxtMaxlength(100)"></TEXTAREA>
</FORM>
</body>
</html>

解决方案 »

  1.   

    这里有不少的问题.
    比如:
    -在onPropertyChange中修改文本内容,修改本身又激发了onPropertyChange事件.结果造成溢出.
    -substr是以文字为单位的,因此 Objs.value=Objs.value.substr(0, MaxCount); 这边语句达不到楼主想要的效果.
    - encode不同,文字的长度不同,比如utf-8中汉字是3个字节,英文字母数字是一个字节.unicode文字中 surrogate pair文字4个字节? 
      

  2.   

    onPropertyChange的问题比较好解决,设个标志就可以了,
    这样就可以避免多次激发。var flag = false;
    function TxtMaxlength(MaxCount){
       if( flag ) return;
       flag = true;
       .....
       flag = false;
      }
    } 关于字符串截取的问题也不难。
    不过你最好先把处理的规则给明确,
    比如: 数字,英文作为单字节。汉字作为2字节。
    因为不同编码下他们的字节数是不同的。
    比较在JAVA内部,文字是使用unicode16编码的。
    这种编码下所有的文字都是两字节的。
    (surrogate pair文字除外)
    建议你在做这个工作前先学习一下unicode编码的知识。
    因为我猜测试你这里这么限制很可能和后台数据库处理有关系。在截取的时候肯定不能这么单纯的使用substr,
    当然不考虑其它因素的话,你在这里可以使用字节数组进行处理。
    处理的时候你要注意一下不能把汉字从中间截断。另外,这里适当引入正则表达式可以使程序简化。
      

  3.   

    很简单,  //操作指定大小把值重新赋值 
      var dd = Objs.value;
        Objs.value=dd.substr(0, MaxCount); 
      

  4.   

    补充楼上,还是 把触发事件改成 onkeyup吧
      

  5.   

    回帖比较负责 改完结果如下:<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 
    <title>无标题文档 </title> 
    <script type="text/javascript"> 
    //计算长度 
    function getLength(str) 

    var i=0; 
    for(var j=0;j <str.length;j++) 

    if(str.charCodeAt(j) <0 || str.charCodeAt(j)>255) 

      i+=2; 

    else 

    i++; 


    return i; 
    } </script> 
    <SCRIPT language="javascript"> 
    function TxtMaxlength(MaxCount){ 
    var Objs=document.getElementById("TRecontent");  //取文本域对象 
    var ObjCou=getLength(Objs.value);          //取文本域长度 
    //var ObjCou=Objs.value.length; 
      form1.YesCou.value=ObjCou+"/"+MaxCount; 
      
      if (ObjCou > MaxCount) 
      { 
      //操作指定大小把值重新赋值 
      var dd = Objs.value;
      for(var i=0;i<MaxCount;i++){
        Objs.value=dd.substr(0, MaxCount-i); 
        var ObjCou=getLength(Objs.value);
        if(ObjCou<=20){
         form1.YesCou.value=ObjCou+"/"+MaxCount; 
         break;
        }
        }
      } 

    </SCRIPT> 
    </head> <body> 
    <FORM method="POST" name="form1"> 
    <input name=YesCou size=4 value=0 readonly> <BR> 
    <TEXTAREA name="TRecontent" id="TRecontent" rows="5" cols="50" onkeyup="TxtMaxlength(20)"> </TEXTAREA> 
    </FORM> 
    </body> 
    </html>