V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
leben
V2EX  ›  问与答

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

  •  
  •   leben · 2012-04-24 14:55:44 +08:00 · 3140 次点击
    这是一个创建于 4385 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我现在知道的关于javascript控制数字输入的方法有两种。
    1、在keydown里判断keycode是否是数字或者小数点,然后返回false or true,控制是否让input里的值发生变化。
    2、在keypress里判断input里的值是否符合指定的格式,如果不是则修改为指定的格式。

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

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

    这个体验只能说尽量做到优化吧。就算做的再好,也可以通过客户端修改脚本绕过去吧。
    loddit
        3
    loddit  
       2012-04-24 15:17:49 +08:00
    如果限定位数为2的话,可以直接用select吧?
    leben
        4
    leben  
    OP
       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
        5
    tuoxie007  
       2012-04-24 16:22:58 +08:00
    感觉这样会搞的你和用户都很累,不如就在输入前在旁边加提示语,输入错误后在旁边提升错误并且不让提交,相信99%的用户不会有意见
    PS. 没必要总想M$看齐,输个IP地址都那么累
    iwege
        6
    iwege  
       2012-04-24 16:30:34 +08:00
    是否可以在每次keyup之后做一次强制转化再写到value里面去?
    leben
        7
    leben  
    OP
       2012-04-25 12:28:44 +08:00
    用了easyui的numberbox。不在这上面花力气了。
    谢谢各位了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5353 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 08:37 · PVG 16:37 · LAX 01:37 · JFK 04:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.