关于javascript控制数字输入的实现

2012-04-24 14:55:44 +08:00
 leben
我现在知道的关于javascript控制数字输入的方法有两种。
1、在keydown里判断keycode是否是数字或者小数点,然后返回false or true,控制是否让input里的值发生变化。
2、在keypress里判断input里的值是否符合指定的格式,如果不是则修改为指定的格式。

感觉这两种方法都有缺陷。
第一种,如果限定位数为2。。。当前值为111.11。要限制不能在小数点后面输入数字,但是可以接受在小数点前面输入数值。好像没有办法实现,因为这个要基于输入后的结果判断。
第二种,上面的场景可以实现,但是视觉上,input里的值会发生变化。

有什么办法能实现不改变这个值实现第一个判断原则呢?
好像问题的关键是,怎么能在input的值发生变化之前捕捉到input修改之后的值。。
3306 次点击
所在节点    问与答
7 条回复
wong2
2012-04-24 15:12:52 +08:00
用keypress或者keydown判断都可以用右键粘贴绕过去吧。。
leben
2012-04-24 15:15:35 +08:00
控制ctrl,shift键
然后blur里面添加检查。。。

这个体验只能说尽量做到优化吧。就算做的再好,也可以通过客户端修改脚本绕过去吧。
loddit
2012-04-24 15:17:49 +08:00
如果限定位数为2的话,可以直接用select吧?
leben
2012-04-24 15:24:51 +08:00
定位数可变的。。。
要求支持10,10.1,10.01
现在在keypress里面判断按下的键,如果按下去的是数字并且设置了小数位数,判断的是input里面的值,10和10.1都没问题,当是10.01的时候,就输不进去了,因为已经满足了正则。但是这个时候应该是输入到小数点后面是不允许的,输入到小数点前面是可以的。

使用的正则是^[0-9]+(\.[0-9]{0," + (scale-1) + "})?$
scale是自定义的小数位数。
tuoxie007
2012-04-24 16:22:58 +08:00
感觉这样会搞的你和用户都很累,不如就在输入前在旁边加提示语,输入错误后在旁边提升错误并且不让提交,相信99%的用户不会有意见
PS. 没必要总想M$看齐,输个IP地址都那么累
iwege
2012-04-24 16:30:34 +08:00
是否可以在每次keyup之后做一次强制转化再写到value里面去?
leben
2012-04-25 12:28:44 +08:00
用了easyui的numberbox。不在这上面花力气了。
谢谢各位了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/33333

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX