想实现一个限制用户输入 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 @zhujinlian 测试了下不好使,输入法输入的居然阻止不了。。。我也不知道为什么。。。 |
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 ![]() 这个看看 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 你这样需要后端去判断,后端对于编码的解析比较好 |