【问题标题】:Backspace and space not working in Firefox退格和空格在 Firefox 中不起作用
【发布时间】:2013-11-29 10:54:23
【问题描述】:

我有以下验证,在 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 退格键时,左右箭头键和空格不起作用。

我将如何解决这个问题?

【问题讨论】:

  • “不起作用”是什么意思?你的意思是按这些键没有效果,你认为它应该,还是按这些键有效果,你认为它不应该?
  • 好了,这里可以使用Jquery的event.which属性。 event.which 属性返回为事件按下了哪个键盘键或鼠标按钮。因此,只需在您的代码中编写 theEvent.which,退格和空格将在 Firefox 中工作。希望这个解决方案有所帮助。

标签: javascript regex jsp firefox gecko


【解决方案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 '.'
       ...
};

【讨论】:

    【解决方案2】:

    使用keyupkeydown 代替keypress

    keypress 应该只在插入字符时触发

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

    【讨论】:

    • 甚至,当我使用 onkeydown 时,退格、左右箭头也不起作用。连同那个小数也不起作用。
    【解决方案3】:

    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
                        }
                        });
    

    【讨论】:

    • 我只希望退格、左右箭头按预期工作
    【解决方案4】:

    试试

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

    Firefox Backspace 字符代码 0。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-23
      • 2015-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-01
      相关资源
      最近更新 更多