想实现一个限制用户输入 20 个字后就不能再输入的功能,现在遇到的问题是,在快到字数限制的时候(比如已经输入了 18 个字),我想要再输入字的时候,由于一般用的是拼音输入法,输入的拼音也会计入输入字数的,导致没办法继续输入。请问有什么好的解决方案吗?
1
lincanbin 2015-10-19 15:42:24 +08:00
达到字数限制时,设置一个定时器,如果***ms 后,字符长度依旧超出限制,进行截断并提示。
|
2
hronro OP @lincanbin 这种体验恐怕不好吧,用户打的字突然就没了。
有没有办法判断用户到底是在打英文,还是在中文输入法里打拼音 |
3
zhujinliang 2015-10-19 17:14:30 +08:00
捕捉 keypress 事件,然后通过 preventDefault()阻止输入
我这是禁止输入除数字以外的字符,测试了一下,拼音可以打上,但选字后无法输入 |
4
learnshare 2015-10-19 17:17:26 +08:00
|
5
zhujinliang 2015-10-19 17:25:07 +08:00
@zhujinliang 测试了下不好使,输入法输入的居然阻止不了。。。我也不知道为什么。。。
|
6
v1024 2015-10-19 17:39:25 +08:00
maxlength 原生。
|
7
hronro OP @learnshare
@v1024 用原生的 maxlength 貌似不符合我的需求,我这边想做是数字、字母和符号占一个字数,汉字占 2 个字数。 而且原生的 maxlength 貌似还有兼容性问题? |
8
FrankFang128 2015-10-19 17:48:24 +08:00 via Android
汉字占两个是哪里的规矩 好奇怪
|
9
learnshare 2015-10-19 18:11:04 +08:00
@hronro 汉字也只占一个长度,前端都是 UTF8 编码的,怎么会两个呢
|
10
hronro OP @learnshare 我知道 UTF-8 里面汉字也只占一个长度,但我要实现在计算字数的时候,一个汉字当两个长度算
|
11
unknownservice 2015-10-19 19:00:17 +08:00
输入法会阻断原生事件判定,中文环境的坑。兼容性最好的办法一楼已经给你了,不要直接删掉,给红圈提示让用户自己删。
|
12
qgy18 2015-10-19 19:13:06 +08:00 via iPhone 1
这个看看 twitter 、 sina 微博的体验就可以了。不要打断用户,让他输,给个提示不让提交就可以了。
|
13
raincious 2015-10-19 19:22:02 +08:00
UTF-8 不会出现这样的情况(占用字符长度不一致)。你需要检查一下你的代码了,看看网页的编码是不是真的是 UTF-8 。
另外就这个问题来说,其实最佳的方法是不要去阻止用户的输入(就是说不要用`preventDefault`),只给出提示,并且让用户不能提交表单。当用户发现提示的时候,会自己删除多余字符的。 一旦你使用了`preventDefault`,就意味着会丢弃用户输入的部分内容,对用户来说这是绝对不可接受的。(不改变用户输入的原则) |
15
hronro OP OK ,谢谢各位的答疑,看来阻止提交还是最佳的方案
|
16
sneezry 2015-10-19 19:57:28 +08:00
监听 compositionend 事件
|
17
learnshare 2015-10-19 19:57:44 +08:00
@hronro 你这样需要后端去判断,后端对于编码的解析比较好
|