yzx99

导航

 

今天想在javascript中限制输入长度,使用如下的代码:
<html>
<body>
<input type="textbox" onKeypress="Javascript:zlk(5);" />
<script type="text/javascript">
function zlk(lSize)
{
  if (event.srcElement.value.truelen()>lSize)
  { //长度超出时,取消输入
    event.keyCode=0;
  }
}
String.prototype.truelen=function()
{
  var i=0;
  for (var j=0;j<this.length;j++)
  {
    if (this.charCodeAt(j)>255)
      i+=2;
    else
      i++;
  }
  return i;
}
</script>
</body>
</html>
结果发现对数字、英文都工作得很好,但对中文却不行,根本不会激发onKeypress事件。以为IE的BUG,后来找到另一个事件onpropertychange来处理,代码改为如下:
<html>
<body>
<input type="textbox" onpropertychange="Javascript:zlpc(5);"/>
<script type="text/javascript">
var lastValue="";
function zlpc(lSize)
{
 //debugger;
 if (event.propertyName=="value")
  if (event.srcElement.value.truelen()>lSize)
  { //长度超出时,取消输入
   //event.returnValue=false; //这种取消事件的方法没有效果
   //只好用恢复原值的方法
   event.srcElement.value=lastValue;
  }
  else
   lastValue=event.srcElement.value;
}

String.prototype.truelen=function()
{
  var i=0;
  for (var j=0;j<this.length;j++)
  {
    if (this.charCodeAt(j)>255)
      i+=2;
    else
      i++;
  }
  return i;
}
</script>
</body>
</html>

posted on 2008-08-02 18:43  yzx99  阅读(1270)  评论(1编辑  收藏  举报