————-2009 年 11 月 19 日 22:03:06——————–
本来也写过类似这个小功能《js对输入框的字数限制》,但是今天有朋友说要个简单的貌似twitter微博输入的功能!所以写了一个。
基本的思路:当文本域获取焦点后,当键盘松开时,判断里面的字符是否为空,从而改变按钮的显示状态和文字的个数。
demo:https://www.html.cn/demo/textarea-num-chack/textarea-num-chack.html
=============2009年11月24日更新============
感谢各位的留言和测试,特别感谢Chaos提供的解决方案,灰灰关于粘贴的测试!
在以上两位的建议和测试下重新修改了一下源代码,主要文本框获得焦点时启动定时器,计算文本框的字数。
demo:https://www.html.cn/demo/textarea-num-chack/textarea-num-chack1.html
=============2010年12月30日更新============
今天接到一个类似的需求,就是想腾讯微博和新浪微博那样,将中文视为一个字符,将英文视为半个字符,也就是两个英文字符按一个字符计算。所以我再原来的基础上做了调整,主要的思路是:
将一个中文字符转换成两个字符计算,一个英文字符按一个英文字符计算,具体代码:
var newvalue = obj.value.replace(/[^\x00-\xff]/g, “**”);
然后在显示已经输入字符数中除以2,记住向上去整(parseInt方法),不然就出现0.5个字符了。
demo:https://www.html.cn/demo/textarea-num-chack/textarea-num-chack2.html
是不是没东西可写了,这有意义吗?
意义在于我帮助了别人,呵呵。
为何不用定时器?
文本框获得焦点时启动定时器,计算文本框的字数,这个比监听键盘事件靠谱多了
在chrome等浏览器下,因为输入时不同于ie,剩余数字就会不断变化,不是bug。先是 gongjv 已经6个字符了,打上去后成2个字符,释放4个。呵呵。
用鼠标复制粘贴就有BUG啰,越粘贴,文字数越少
🙂
哈哈中文字符长度没换算成2个字符哈
刚在看过这样的做法.应该还得考虑无JS状态时.还有那个”你还能输入多少字”得用JS生成结点.
浏览器端的字符数限制与数据据有什么关系?一个汉字字节,一个英语占一个字节,某些情况下,汉字会占3个字节。如果考虑这些,有没有好解决方案,让客户输入的东西到了服务器不会被截断呢?
输入然后删除呢?
即便是现在这个样子也有会有问题…
寒
@qbaty 还有什么问题,请指出!谢谢。
好像还不能区分汉字和字母,汉字和字母所占的字节不一样.
由于IE8对于innerHTML的BUG,在采用innerHTML最字数显示进行更改的时候会导致CPU飙升,而导致舒服法卡住,所以sina采用了定时器,由定时器去200毫秒innerHTML
http://blog.chibaole.com/web/10091.html
学习了!谢谢!
定时器是在获取焦点时启用了,那失去焦点后为什么不关闭定时器呢?
中文输入满后输入一个英文就会超出0个字符
会出现“已超出0字”的情况