textarea实现maxlength的老问题

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

<textarea   rows= "4 "   cols= "30 "   id=test
  οnkeypress=doKeypress()
  οnkeydοwn=doKeydown()
  onbeforepaste=doBeforePaste()
  οnpaste=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代码里加了个οnkeyup=doKeypress()
function   doKeydown()里if(element.value.length   >   maxLength-1)
改称if(element.value.length   >   maxLength)
总的来说这个方法还算不错
还有个问题,function   doKeydown()里为什么还要加上个
setTimeout呢?

转载于:https://www.cnblogs.com/neil-zhao/articles/1230156.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值