仅限JQuery输入值数字和小数

仅限JQuery输入值数字和小数,jquery,Jquery,我希望输入字段只接受数字和小数 输入字段不应接受负数、字母、符号,而不是单个小数。 数字1在输入类型文本时工作得非常好。 然而,数字2不起作用,唯一的区别是数字类型 我只想要数字和小数。没有负片、字母和符号。 $'decimal'.keyup函数{ var val=$this.val; 伊菲斯南瓦尔{ val=val.replace/[^0-9\.]/g,; ifval.split'.'长度>2 val=val.replace/\.+$/,; } $this.valval; }; 您可以使用类作

我希望输入字段只接受数字和小数

输入字段不应接受负数、字母、符号,而不是单个小数。 数字1在输入类型文本时工作得非常好。 然而,数字2不起作用,唯一的区别是数字类型

我只想要数字和小数。没有负片、字母和符号。

$'decimal'.keyup函数{ var val=$this.val; 伊菲斯南瓦尔{ val=val.replace/[^0-9\.]/g,; ifval.split'.'长度>2 val=val.replace/\.+$/,; } $this.valval; };
您可以使用类作为泛型解决方案,而不是使用ID

     $('.inputclassname').on('keypress', function(e){
     return e.metaKey || // cmd/ctrl
     e.which <= 0 || // arrow keys
     e.which == 8 || // delete key
     /[0-9]/.test(String.fromCharCode(e.which)); // numbers
     })
如果值包含字母,则该值无效,则无法从中获取值。每次尝试访问此.value.length时,它都等于。正因为如此,你的if语句从未达到

如果只需要接受数字,则需要在输入前检查keyCode,如果keyCode与数字键或箭头键不匹配,或者delete键或backspace键不匹配,则返回false:

$input.onkeydown,函数E{ var charCode=e.which; 回来
charCode>=48&&charCode=37&&charCode=96&&charCode看起来Chrome已经为找到的数字和电子邮件类型的输入禁用了select API,因此您正在寻找解决方法,因为此代码无法工作

Chrome浏览器最近禁用了类型为的输入的select api 电话及电邮:

select api是一组属性和函数,允许 我们可以获取并设置用户在文本中突出显示的文本部分

所涉及的属性和功能是:选择selectionStart 选择和选择方向设置范围文本设置选择范围

检查您的JSFIDLE控制台,您可以找到错误的确切原因:

未捕获的InvalidStateError:无法读取“selectionStart” 来自“HTMLInputElement”的属性:输入元素的类型“number” 不支持选择


所有的键盘键都有不同的ASCII码,只要创建一个脚本,除了识别数字和小数外,其余的acsii码都将被忽略

HTML

JS


工作示例:

简单jquery的替代解决方案是

HTML

Jquery


工作示例:

不起作用。我已将您提供的解决方案放在JSFIDLE上,它对十进制无效。我只想要数字和小数。没有负数、字母和符号。[dude,我无法编辑你的JsFiddler尝试将代码粘贴到你的fiddler中。谢谢Prabhat。你提供的新解决方案不适用于十进制值。但现在输入类型是文本。我想让它与类型number一起工作。不起作用。我已将你提供的解决方案放在jsfiddle上,它不适用于十进制。我想要数字和小数o只有。没有负数,没有字母,没有符号。没有。不符合要求。请阅读规范。检查此答案…完全符合您的要求。这比我找到的大多数解决方案效果更好,但我不能让它保持在小数点后2位。parseFloatfixed.toFixed2导致奇怪的行为。
<input type="text" class="inputNumberDot">
$(document).ready(function() {
  $('.inputNumberDot').keypress(function(event) {
    var charCode = (event.which) ? event.which : event.keyCode

    if (
      (charCode != 45 || $(this).val().indexOf('-') != -1) && // “-” CHECK MINUS, AND ONLY ONE.
      (charCode != 46 || $(this).val().indexOf('.') != -1) && // “.” CHECK DOT, AND ONLY ONE.
      (charCode < 48 || charCode > 57))
      return false;

    return true;

  });
});
$(function(){
  $("input.decimal").bind("change keyup input", function () {
    var position = this.selectionStart - 1;
    //remove all but number and .
    var fixed = this.value.replace(/[^0-9\.]/g, '');
    if (fixed.charAt(0) === '.') //can't start with .
      fixed = fixed.slice(1);

    var pos = fixed.indexOf(".") + 1;
    if (pos >= 0) //avoid more than one .
      fixed = fixed.substr(0, pos) + fixed.slice(pos).replace('.', '');

    if (this.value !== fixed) {
      this.value = fixed;
      this.selectionStart = position;
      this.selectionEnd = position;
    }
  });
});