textarea实现maxlength的老问题

要求textarea实现maxlength,超出最大长度禁止输入。
附加条件
1。英文或是中文都可输入,一个中文字表示一个长度。
2。拷贝粘贴不可以超出长度,也不可以写到onkeyup方法里,如果写进onkeyup会一闪而过。
3。我之前试过判断输入的长度然后截取,发现当用微软拼音输入法的时候,测试长度为边界值的情况,输入汉字后会覆盖以前的内容,希望回答的方法充分测试这一点。

<textarea   rows= "4 "   cols= "30 "   id=test
  onkeypress=doKeypress()
  onkeydown=doKeydown()
  onbeforepaste=doBeforePaste()
  onpaste=doPaste()
> </textarea>

<script   language=javascript>
maxLength   =   20
element=document.all[ "test "]

function   doKeypress()
{
  if(!isNaN(maxLength))
  {
    maxLength   =   parseInt(maxLength)
    var   oTR   =   element.document.selection.createRange()
    if(oTR.text.length   > =   1)
      event.returnValue   =   true
    else   if(element.value.length   >   maxLength-1)
      event.returnValue   =   false
  }
}

function   doKeydown()
{
  setTimeout(function()
  {
    maxLength   =   parseInt(maxLength)
    if(!isNaN(maxLength))
    {
      if(element.value.length   >   maxLength-1)
      {
        var   oTR   =   window.document.selection.createRange()
        oTR.moveStart( "character ",   -1*(element.value.length-maxLength))
        oTR.text   =   " "
      }
    }
  },1)
}

function   doBeforePaste()
{
  if(!isNaN(maxLength))
    event.returnValue   =   false
}

function   doPaste()
{
  if(!isNaN(maxLength))
  {
    event.returnValue   =   false
    maxLength   =   parseInt(maxLength)
    var   oTR   =   element.document.selection.createRange()
    var   iInsertLength   =   maxLength   -   element.value.length   +   oTR.text.length
    var   sData   =   window.clipboardData.getData( "Text ").substr(0,   iInsertLength)
    oTR.text   =   sData;
  }
}
</script>

学习ING~


MayAutumn(good   good   study   &&   day   day   up)
对你的方法做了点修改
html代码里加了个onkeyup=doKeypress()
function   doKeydown()里if(element.value.length   >   maxLength-1)
改称if(element.value.length   >   maxLength)
总的来说这个方法还算不错
还有个问题,function   doKeydown()里为什么还要加上个
setTimeout呢?

posted on 2008-06-26 09:29  neil-zhao  阅读(2650)  评论(0编辑  收藏  举报

导航