Javascript 接受浮点数的文本字段在chrome中工作正常,而不是在firefox中

Javascript 接受浮点数的文本字段在chrome中工作正常,而不是在firefox中,javascript,jquery,regex,Javascript,Jquery,Regex,我在js中有一个只接受浮点数的函数,其中浮点数的正则表达式正在测试中 $(document).ready(function () { $(".validate-foating-value").keypress(function (e) { if (!/^[0-9]*\.?[0-9]*$/.test($(e.target).val() + String.fromCharCode(e.which))) { return false;

我在js中有一个只接受浮点数的函数,其中浮点数的正则表达式正在测试中

$(document).ready(function () {

    $(".validate-foating-value").keypress(function (e) {
         if (!/^[0-9]*\.?[0-9]*$/.test($(e.target).val() + String.fromCharCode(e.which))) {
            return false;
        }
    });
});
它在Firefox的chrome中也可以正常工作,但我在Firefox中面临的问题是

  • 退格无效
  • 箭头键不工作
  • shift+箭头键用于选择,Ctrl+A不起作用
这是你的电话号码


任何其他关于浮动数字的解决方法?

您可以破解如下内容:

$(document).ready(function () {

$(".validate-foating-value").keypress(function (e) {
    var keyCode =  e.keyCode ? e.keyCode : e.which ? e.which : e.charCode;

     if (!/^[0-9]*\.?[0-9]*$/.test($(this).val() + String.fromCharCode(keyCode)) && keyCode!=8) {
        return false;
    }
});
}))

请让我知道它是否适合你


谢谢

我将您的Javascript/JQuery代码更改为

$(document).ready(function () {
  $(".validate-foating-value").bind('input propertychange', function () {
      if (!/^[0-9]*\.?[0-9]*$/.test($(this).val())) {
          var currentVal = $(this).val();
          $(this).val(currentVal.slice(0,-1));
      }
  });
});
关于
keypress
有一个记录在案的问题,即该事件没有在浏览器间一致触发(例如,backspace不会在Chrome上触发
keypress

我尝试使用
keyup
代替
keypress
,但我不知道如何检测键盘事件正在产生一些输入的事实。我曾想过在输入框上使用,但并不是每次按下一个键时都触发此事件,而是仅当元素失去焦点时才会触发

所以最后我在被接受的答案中找到了一个解决方案

请让我知道这是否有帮助


为什么在执行验证之前要连接
String.fromCharCode(e.which)
?我猜当你按下这些特殊键时,返回的是与regexp不匹配的内容。@Barmar我在调试模式下检查了它-在连接'String.fromCharCode(e.which)`之前,我按下了一个键,但
$(e.target)。val()
中没有任何内容,但我实际上按下了该键,然后我检查我在
e.which
中是否有值,为了克服它,我在
$(e.target.val()
中添加了值。在Chrome中,编辑键(如backspace)不会触发
keypress
事件,在Firefox中是这样的。有关详细信息,请参阅example@Barmar是的,你是对的,这就是为什么我现在很痛苦,我想知道为什么所有的浏览器都没有相同的行为,为什么它们有不同的js引擎。我想我们需要像上面那样破解backspace,你可以在条件中添加其他键代码,它会工作的。是的,我现在正在尝试类似的东西,但我内心的某种东西说这不是正确的方式,而是一个好把戏,不是吗?是的,这将解决您的问题,但我不认为有任何简单的方法,可能是FF的下一个版本将支持它:)