下面的这段代码实现 提示文本框剩余可以输入多少字,我想当输入满130个字以后就不可以再输入了,可是当汉字和数字在一起的时候这段代码超过130字以后还会继续往文本框加字,如何解决这个bug,希望高手帮我测试下<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns:mudoo>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>限制文本框</title>
<HTML>   
 
  <BODY>     
  <SCRIPT LANGUAGE="JavaScript">
<!-- Begin
maxLen = 130;
function DataLength(fData)   
  
{   
  
    var intLength=0   
    
    for (var i=0;i<fData.length;i++)   
  
    {   
        if(intLength<130)
{
        if ((fData.charCodeAt(i) < 0) || (fData.charCodeAt(i) > 255))   
  
            intLength=intLength+2   
  
        else  
  
            intLength=intLength+1     
}  
  
    }   
  
    return intLength   
  
}   
function checkMaxInput(form) {
if (form.message.value.length > maxLen)
form.message.value = form.message.value.substring(0, maxLen);
// otherwise, update 'characters left' counter
else 
form.remLen.value = maxLen - DataLength(form.message.value);
}
// End -->
</script><form name=myform action="YOUR-SCRIPT.CGI">
<font size="1" face="arial, helvetica, sans-serif"> 你只可以输入130个字<br>
<textarea name=message wrap=physical cols=28 rows=4 onKeyDown="checkMaxInput(this.form)" onKeyUp="checkMaxInput(this.form)"></textarea>
<br>
<input readonly type=text name=remLen size=3 maxlength=3 value="130">还可以输入font>
</form>

解决方案 »

  1.   

    var len=function(s){//获取字符串的字节长度
        s=String(s);
        return s.length+(s.match(/[^\x00-\xff]/g) ||"").length;//加上匹配到的全角字符长度
    },
    checkMaxLength2=function(obj,limit){
        var val=obj.value;
        if(len(val)>limit) {
            //val=val.substr(0,limit);
            while(len(val=val.substr(0,val.length-1))>limit);
            obj.value=val;
        }
    };加上onkeyup="checkMaxLength2(this,130)"
      

  2.   


    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>限制文本框</title>
    </head>
    <body>     
    <form name=myform action="YOUR-SCRIPT.CGI">
    <font size="1" face="arial, helvetica, sans-serif"> 你只可以输入13个字<br>
    <textarea name=message wrap=physical cols=28 rows=4 onKeyDown="checkMaxInput.run(this)" onKeyUp="checkMaxInput.run(this)"></textarea>
    <br>
    <input readonly type=text name="remLen" id="remLen" size=3 maxlength=3 value="13">还可以输入
    <script>
    var checkMaxInput = function() {
    var getLen = function(str) {return str.replace(/[^\x00-\xff]/g, '--').length;}
    var oInfo = document.getElementById('remLen'), 
            InfoLen = parseInt(oInfo.value, 10),
    maxLen = InfoLen || 0; // 最大字数
    return {
    run: function(o) {
    var i = InfoLen - getLen(o.value);
    if(i < 0) {
    var temp = 0, cut = o.value.substring(0, maxLen);
    for(var i = 0, len = cut.length; i < len; i++) {
    temp += getLen(cut[i]);
    if(temp > maxLen) break;
    }
    o.value = cut.substring(o, i);
    } else {
    oInfo.value = i
    }
    }
    };
    }();
    </script>
    </form>
    </body>
    </html>
      

  3.   

    s_liangchao1s你的报脚本错误,而且有很多小问题,比如提示还剩下多少字的那个地方,当我用复制往文本框加东西的时候就不提示了,而且超过了最大值还可以往文本框里写数据
      

  4.   

    我机器上没问题. 你把我给你的整个HTML代码都拷过去测试
      

  5.   

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns:mudoo>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>限制文本框</title>
    <HTML>   
     
      <BODY>     
      <SCRIPT LANGUAGE="JavaScript">
    function getlen(str){ 
        var l=0; 
        for(var i=0;i<str.length;i++){ 
            l+=1; 
            if(str.substring(i,i+1).match(/[\u4e00-\u9fa5]/))l+=1;
        } 
        return l
    } function checkMaxInput(form,maxLen) {
    form.remLen.value = maxLen - getlen(form.message.value);
    if(event.keyCode==8) return true;
        if (form.message.value.length >= maxLen){
    return false;
    }
    return true;
    }
    </script><form name=myform action="YOUR-SCRIPT.CGI">
    <font size="1" face="arial, helvetica, sans-serif"> ?只可以?入130个字<br>
    <textarea name=message wrap=physical cols=28 rows=4 onKeyDown="return checkMaxInput(this.form,130)" onKeyUp="checkMaxInput(this.form,130)"></textarea>
    <br>
    <input readonly type=text name=remLen size=3 maxlength=3 value="130">?可以?入font>
    </form>
      

  6.   

    对粘贴进行限制
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns:mudoo>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>限制文本框</title>
    <HTML>   
     
      <BODY>     
      <SCRIPT LANGUAGE="JavaScript">
       function beforepaste(maxLen){
         var obj=clipboardData.getData("Text");
         if(myform.message.value.length+obj.length>maxLen){
            myform.message.value=(myform.message.value+obj).substring(0,maxLen);
            clipboardData.setData("Text","");//clear clipboarddata
         }
      }function getlen(str){ 
        var l=0; 
        for(var i=0;i<str.length;i++){ 
            l+=1; 
            if(str.substring(i,i+1).match(/[\u4e00-\u9fa5]/))l+=1;
        } 
        return l
    } function checkMaxInput(form,maxLen) {
        form.remLen.value = maxLen - getlen(form.message.value);
        if(event.keyCode==8) return true;
        if (form.message.value.length >= maxLen){
            return false;
        }
        return true;
    }
    </script><form name=myform action="YOUR-SCRIPT.CGI">
    <font size="1" face="arial, helvetica, sans-serif"> ?只可以?入130个字<br>
    <textarea name=message wrap=physical cols=28 rows=4 onbeforepaste="beforepaste(130);" onKeyDown="return checkMaxInput(this.form,130)"  onKeyUp="return checkMaxInput(this.form,130)"></textarea>
    <br>
    <input readonly type=text name=remLen size=3 maxlength=3 value="130">?可以?入font>
    </form>