限定字符长度,截断中文字符

今日遇到个麻烦事。input限定输入字节数是8,中文自然算两个字节。本来一路顺利,keyup keydown keypress事件挨个试过去,把中文用正则替换成两个英文字符,超过8的就return false。ie下表现超级完美。
这个时侯Firefox下麻烦事就开始了,ie下,中文输入法状态下他也是能捕获键盘事件的。但ff下却无法捕获输入法状态下的键盘事件,比如我搜狗,他只能识别到最后那次空格……一恼火,干脆换条思路,直接截断字符来解决。效果感觉还行,总比没有好,此方法也适用于复制进去的文本。

  1. $("input").bind("keyup",function() {
  2.     var str=this.value;
  3.     while (str.replace(/[^\x00-\xFF]/g,"aa").length>8) {
  4.         str=str.substr(0,str.length-1);
  5.     }
  6.     this.value=str;
  7. });

代码很简单,也很安全。想封装成其他形式请自便。

我这里用的是减法,对于input这种很合适。因为不会多出去很多字符的。
这里我事后搜到一个做加法的,也不错,可以参考一下。只是不建议像他这样直接给原生对象做扩展,容易冲突。放到自己的私有对象下会比较好。

7 thoughts on “限定字符长度,截断中文字符

    • 管用啊,因为我用了while而不是if(我一开始用了if,发现复制的不行,就改成while了,效果很好。)

    • 是说,鼠标,右键,复制的么?这个真没太好办法,只能进一步绑定blur事件了,因为鼠标复制后似乎不触发任何事件。看来一个小东西要写完美也是很困难的啊。

  1. 对呀 ,我自己写了一个demo实验了下,鼠标右键复制的话会有问题的,还有待改进,呵呵

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>