输入字段只需要一个小数点

时间:2015-12-07 08:30:13

标签: javascript jquery

我使用以下代码仅制作字段数字。一切顺利,但它允许超过一个小数点。专家请帮助..

$("#" + fieldId).keydown(function (e) {
        // Allow: backspace, delete, tab, escape, enter and .
        if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 190,110]) !== -1 ||
             // Allow: Ctrl+A
            (e.keyCode == 65 && e.ctrlKey === true) || 
             // Allow: home, end, left, right
            (e.keyCode >= 35 && e.keyCode <= 39)) {
                 // let it happen, don't do anything
                 return;
        }
        // Ensure that it is a number and stop the keypress
        if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) {
            e.preventDefault();
        }

    });

3 个答案:

答案 0 :(得分:0)

尝试类似(来自here

$('.number').keypress(function(event) {
  if ((event.which != 46 || $(this).val().indexOf('.') != -1) &&
    ((event.which < 48 || event.which > 57) &&
      (event.which != 0 && event.which != 8))) {
    event.preventDefault();
  }

  var text = $(this).val();

  if ((text.indexOf('.') != -1) &&
    (text.substring(text.indexOf('.')).length > 1) &&
    (event.which != 0 && event.which != 8) &&
    ($(this)[0].selectionStart >= text.length - 1)) {
    event.preventDefault();
  }
});

答案 1 :(得分:0)

Number.prototype.countDecimals = function () {
    if(Math.floor(this.valueOf()) === this.valueOf()) return 0;
    return this.toString().split(".")[1].length || 0; 
}

实施例

var x = 23.453453453;
x.countDecimals(); // 9

event.preventDefault();

之前检查计数

这可能会对你有帮助。

$("#" + fieldId).keydown(function (e) {
        // Allow: backspace, delete, tab, escape, enter and .
        if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 190,110]) !== -1 ||
             // Allow: Ctrl+A
            (e.keyCode == 65 && e.ctrlKey === true) || 
             // Allow: home, end, left, right
            (e.keyCode >= 35 && e.keyCode <= 39)) {
                 // let it happen, don't do anything
                 return;
        }
        // Ensure that it is a number and stop the keypress
        if ($("#" + fieldId).val().countDecimals() >=2  || (e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) {
            e.preventDefault();
        }

    });

答案 2 :(得分:0)

如果您对您的解决方案感到满意并且您只想允许一个抽取,那么您将只需添加额外的行来检查,我使用您的代码但我将keydown更改为 keypress 否则它将无法正常工作为了捕捉点字符,我添加了( ||($(this).val()。split(“。”)。length - 1&gt; 0&amp;&amp; String.fromCharCode(e.which)= ='。'))代码末尾:

- 添加的代码只检查是否已经有一个点,如果按下的键是点。

$("#" + fieldId).keypress(function (e) {
        // Allow: backspace, delete, tab, escape, enter and .
        if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 190,110]) !== -1 ||
             // Allow: Ctrl+A
            (e.keyCode == 65 && e.ctrlKey === true) || 
             // Allow: home, end, left, right
            (e.keyCode >= 35 && e.keyCode <= 39)) {
                 // let it happen, don't do anything
                 return;
        }
        // Ensure that it is a number and stop the keypress
        if ($("#" + fieldId).val().countDecimals() >=2  || (e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105 || ($(this).val().split(".").length - 1 > 0 && String.fromCharCode(e.which) == '.'))) {
            e.preventDefault();
        }

    });
  • 你的打瞌睡方式不会阻止用户粘贴无效内容,你可以用这段代码阻止用户使用dat:

      $("#" + fieldId).bind('paste', function (e) 
      {
         e.preventDefault();
      });
    
  • 我建议你不要因为以下问题而对kepress或keydown进行验证:

  • 用户可以在数字后键入一个点,并保留您的代码不会阻止的输入(如88. =&gt;无效)(否则用户无法输入抽取数字)。
  • bij同时按下多个键我在输入中获取无效字符而不阻止它们。

- 我会建议你验证模糊,以便用户获得编辑的自由,你可以确保验证输入的真实内容。