关于Javascript控制数字输入的实现 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
leben
V2EX    问与答

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

  •  
  •   leben 2012-04-24 14:55:44 +08:00 3555 次点击
    这是一个创建于 4921 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我现在知道的关于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     Solana     2791 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 14:50 PVG 22:50 LAX 07:50 JFK 10:50
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86