退格和空间无法在Firefox中运行

时间:2013-11-29 10:54:23

标签: javascript regex jsp firefox gecko

我有以下验证,只允许Javascript中的数字和小数

function validate(evt) {
      var theEvent = evt || window.event;
      var key = theEvent.keyCode || theEvent.which;           
      key = String.fromCharCode( key );
      var regex = /[0-9]|\./;
      if( !regex.test(key) ) {
        theEvent.returnValue = false;
        if(theEvent.preventDefault) theEvent.preventDefault();
      }
}

我在onkeypress='validate(event)'

这样的文本框元素中调用它

此代码在IE中运行良好,但当我尝试使用Firefox退格键时,左右箭头键和空格不起作用。

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:1)

使用按键是正确的解决方案,但您只需要通过JS附加事件处理程序(无论如何这被认为是更好的做法),并使用如下内容:

$('#myInput').keypress(function(event){
   validate(event)
});

function validate(evt) {
  var theEvent = evt || window.event;
  var key = theEvent.keyCode || theEvent.which;           
  if (key <48 || key > 57  || key == 190)//keycode is a number between 0 and 9 or '.'
       ...
};

答案 1 :(得分:0)

使用keyupkeydown代替keypress

keypress仅在有字符插入时才会触发

http://www.quirksmode.org/dom/events/keys.html

答案 2 :(得分:0)

keydown函数适用于所有浏览器。请使用keydown功能,它会工作!

实施例: -

$(document).keydown(function (e){
                    if(e.keyCode == 37) // left arrow
                    {

                    //code for left arrow

                    }
                    else if(e.keyCode == 39)    // right arrow
                    {

                   //code for right arrow
                    }
                    });

答案 3 :(得分:0)

尝试

    //allows number and hyphen only 
    function isNumeric(e)
    {
        var a = e.charCode;
        if(a==0){return;}
        return ((a >= 48 && a <= 57));
    }
    </script>

Firefox Backspace charcode 0。