最近在做一个js页面联动的控件,目标很简单,就是在一个input里输入数字(只能是数字),然后在和其他的页面元素进行计算,并把结果放置到第三个页面元素里,举个例子:    col1        col2        col3        result
    1           2           [ ](a)      3
    10          20          [ ](b)      30比如我在(a)里面输入3之后,result就变成6,(a)什么都不输入的话,默认的就是col1和col2的和。
对于(b)同理。
但是要求(a)和(b)可以输入形如:
123  (一百二十三)
.123 (零点一二三)
1.23 (一点二三)
123. (一百二十三)
-123 (负 一百二十三)
-.123(负 零点一二三)
-1.23(负 一点二三)
-123.(负 一百二十三)
形式的数字(我试过,这些数字的isNaN都是false)。我是想在 (a)(b) 里边输入边计算,比如我想在(a)里输入10,按键顺序是先按数字1,再按数字0,这两步在resule中显示的结果应该是4,然后是13。我是用keydown和keyup事件做的,在用户按下(keydown)一个数字键的时候我就把(a)里之前的数字记录到一个临时变量里,当keyup的时候,检查输入框里的是不是数字,如果是数字,则和最后一列result计算,否则用之前临时变量里的值替换input的value。但是这样遇到一个问题,用户可以按着一个数字键不放手,或者是按着backspace键不放手,这就导致我的result计算结果出问题。找了好久都没有想到好办法,希望来这里和大家讨论下,看看有没有更好的实现方法。

解决方案 »

  1.   

    把onkeydown写在onkeypress中,并且if(8==keycode){
      event.preventDefault();
    }
      

  2.   

    噢想起这样就按不了backspace了,还是有问题
      

  3.   

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
        <script type="text/javascript">
            var lastkeyCode = -1;
            function TestKeyDown(event) {
                if (event.keyCode == lastkeyCode) {
                    alert("重复按下了某个按键!");
                    //处理
                }
                lastkeyCode = event.keyCode;
            }
        </script>
    </head>
    <body>
        <input type="text" value="Test" onkeydown="TestKeyDown(event);" />
    </body>
    </html>