我之所以完善这个控件也是考虑到控件在判断长度时原来是以Unicode码标准,我希望以Ansi码标准判断,一个中文当成两个长度来处理,这样和数据库保持一致。

解决方案 »

  1.   

    <script>
    function   aa(a){
          if(/[^,0-9]/g.test(a.value)){
                a.value=a.value.replace(/[^,0-9]/g,"")
          }
    }
    </script>
    <input   type="text"   onpropertychange='aa(this)'   oninput='this.value=this.value.replace(/[^,0-9]/g,"")'> 这个是只能输数字和^的例子,参照下
      

  2.   

    你可以使用string.charCodeAt方法得到unicode数字,然后进行判断。
    至于事件,为了兼容浏览器,需要多做测试
      

  3.   

    回复铭轩:
    可以使用正则表达式来处理unicode码转Ansi码过程中的问题,但是这是这个问题的一个细节,谢谢给我参考建议。
      

  4.   

    我的是
    “现在希望超出长度时,按下键就不输入,而不是先输入后被截掉这种效果。“你的这种效果,
    至于长度判断你可以在那2个事件里用函数包装
    那2个事件一个是ie,一个是ff下用的
      

  5.   

    function getAnsiLen(str){ 
      return str.replace(/[^\x00-\xff]/g,"**").length; 
    }
    可以返回Ansi码标准的字符长度。
    关键问题是:中文输入不触发客户端keydown事件。目前我的处理方式是:
                  //keyup时执行以下cut方法
                  function cut(textinput)
                {
                    if (event) {if ((event.shiftKey == true)||(event.ctrlKey == true)||(event.keyCode == 16)||(event.keyCode == 37)||(event.keyCode == 38)||(event.keyCode == 39)||(event.keyCode == 40)||(event.keyCode == 17)) return;};
                    var maxl = textinput.getAttribute('maxL');
                    if (maxl == 0) return;
                    pos = getPos(textinput);
                    textinput.value = subansistr(textinput.value,maxl);
                    setPos(textinput,pos);
                }            //取光标位置
                function getPos(obj)
                {
                    obj.focus();
                    var workRange=document.selection.createRange();
                    obj.select();
                    var allRange=document.selection.createRange();
                    workRange.setEndPoint('StartToStart',allRange);
                    var len=workRange.text.length;
                    workRange.collapse(false);
                    workRange.select(); 
                    return len;
                }
                //重新设置光标位置
                function setPos(obj,pos)
                {
                    var r = obj.createTextRange(); 
                    r.collapse(true); 
                    r.moveStart('character',pos); 
                    r.select();
                }
    因keyup中处理能明显看出字符输入后被截掉了,用户感觉不好!
      

  6.   

    textarea的长度验证在离开焦点或提交前验证
    不必在以下情况下验证:
    1。onkeydown
    2。onkeyup(按住某键不放)
    3。onpaste(粘贴)
    4。ondragend(拖入)
      

  7.   

    <html><head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>New Page 1</title>
    </head><body>
    <textarea maxlength=30 onbeforedeactivate=" return checkMaxLength(this);">fds afds afds afd afds afdsa fdsa fdsa fdfdsa fdsa fds afdsa </textarea>
    </body></html>
    <script>
    /**
    *checkMaxLength.
    */
    function checkMaxLength(textareaObj,maxLength)
    {
    if(maxLength == null) maxLength=textareaObj.getAttribute("maxLength");
    if(maxLength == null) maxLength=1024;
    var currentLength = textareaObj.value.length;
    if (currentLength > maxLength) {
    alert("The length of your input ("+currentLength+") is larger than maxLength ("+maxLength+") .");
    if(textareaObj.createTextRange){
    var textRange=textareaObj.createTextRange();
    var enterMatch=textareaObj.value.substr(0,maxLength).match(/\n/ig);
    var enterNum=0;
    if(enterMatch) enterNum=enterMatch.length
    textRange.moveStart('character',maxLength-enterNum);
    textRange.select();
    }
    else {
    textareaObj.focus();
    textareaObj.setSelectionRange(maxLength, currentLength); 
    }
    window.latestValidateObj=textareaObj;
    setTimeout("window.latestValidateObj.focus();",0);
    return false;
    }
    return true;
    }
    </script>
      

  8.   

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <html>
     <head>
      <title> New Document </title>
      <meta name="Generator" content="EditPlus">
      <meta name="Author" content="">
      <meta name="Keywords" content="">
      <meta name="Description" content="">
      <script language="JavaScript">
      <!--
    String.prototype.ansiLength = function()
    {
    var nl = this.length;
    var al = nl;
    for (var i = 0; i < nl; i++)
    {
    if (this.charCodeAt(i) > 127)
    {
    al = al + 1;
    }
    }
    return al;
    } function keyd(obj)
    {
    var nKeyCode = event.keyCode;
    if (event.ctrlKey || nKeyCode==8 || nKeyCode==46 || nKeyCode==37 || nKeyCode==38 || nKeyCode==39 || nKeyCode==40) return true;
    var rng = document.selection.createRange();
    var nLeft = 50 - obj.value.ansiLength() + rng.text.ansiLength();
    if (nLeft<=0) return false;
    return true;
    } function valuefix(obj)
    {
    if ((event.propertyName == "value")&&(obj.value.ansiLength() > 50))
    {
    obj.value = SubAnsiStr(obj.value,50);
    }
    }function SubAnsiStr(str,i)
    {
        if (i <= 0) return '';
        var iCount = 0;
        var sReturn = '';
        for (var j = 0; j < str.length; j++)
        {
            if ((str.charCodeAt(j) >= 32) && (str.charCodeAt(j) <= 126))
            {
                if ((i - iCount) == 0) return sReturn;
                sReturn += str.charAt(j);
                iCount++;
            }
            else if ((str.charCodeAt(j) == 13)||(str.charCodeAt(j+1) == 10))
            {
                if ((i - iCount) <= 1) return sReturn;
                sReturn += str.charAt(j);
                sReturn += str.charAt(j+1);
                iCount = iCount + 2;
                j++;
            }
            else
            {
                if ((i - iCount) <= 1) return sReturn;
                sReturn += str.charAt(j);
                iCount = iCount + 2;
            }
        }
        return sReturn;
    }
      //-->
      </script>
     </head> <body>
      <textarea style="width:150px;height:70px" onpropertychange="return valuefix(this);" onkeydown="return keyd(this);" ></textarea>
      <input onpropertychange="return valuefix(this);" onkeydown="return keyd(this);" ></input>
     </body>
    </html>
    差不多了吧
      

  9.   

    String.prototype.len=function()

        return this.replace(/[^\x00-\xff$]/g,"**").length; 

    function CheckLength(oSrc, args) 

        var ValidStrLength=4000;                  
        if (args.Value.len()<=ValidStrLength) 
            args.IsValid = true; 
        else 
            args.IsValid = false; 
    }  在提交以前,先验证一下长度。
      

  10.   

    上边的那个发错了
    String.prototype.len=function()

        return this.replace(/[^\x00-\xff$]/g,"**").length; 

    function CheckLengthForJs(args) 

        var ValidStrLength=4000;                  
        if (args.value.len()<=ValidStrLength) 
        {
             
             return true;
        }
          
        else 
        {
             args.select();
             return false;
        }
            
    }  
    在提交以前,先验证一下长度。