背景
前端开发中往往有如下需求限制前端文本框(textfield,input,textarea,div)等的输入字数,可以参考新浪微博。但是这里有个问题,当我们使用中文输入法的时候,我们输入zheshishenm
这段拼音会导致占用字数为11,当我们使用确认中文这是什么
后其占用字数又变为4。假设我们需求当用户输入超过20个字的时候截断其输入,并实时的显示剩余字数,如图:
那我们该怎么实现呢?
方案一
在非DIV模拟的情况下,使用
maxlength
属性来截断,使用JS来监听剩余字数
这个方案比较easy,当然不是我们本文所讨论的,而且也有诸多问题,首先只能对拥有maxlength
属性的dom标签使用;其次IE9之前的版本不支持maxlength
;最重要的问题还是使用输入法的时候,输入法会把你的输入缓存在输入法界面,这样你不停的输入JS所监听的length值是一直在增长的,直到你确认选择了某段文字,超过maxlength
的部分会自动被截断,这时我们监听的剩余字数会出现从剩余N到0再到-N再到0的情况!如同微博的输入框,微博采用超出的形式来解决这个问题。本着对前端学习深究的态度,这不是我们想要的!