首页 > 解决方案 > 当值突出显示时,允许用户在仅数字字段中输入小数点作为第一个字符 JavaScript

问题描述

我的输入字段有一个函数,它只允许数字值、一个小数点、小数点后的两个十进制值、退格键和删除键。用户还可以键入 0.5 或 5。这将更新为 0.5 / 5.00 onBlur。我当前的问题是当整个字段值被高亮时,用户不能将小数点作为第一个字符

在此处输入图像描述

他们必须先按删除/退格键,然后才能输入小数点(句点键)作为第一个字符。这是我想在这种情况下删除的一个额外按键。我希望在这种情况下可以键入 0.5,而不必先删除该值(功能请求)。

这是我目前的实现

function validateFloatKeyPress(el, evt) {
   var charCode = (evt.which) ? evt.which : event.keyCode;
   var number = el.value.split('.');
   //allow backspace
   if (charCode == 8 ) {
       return true;
   }
   //numbers only
   if (charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57))   {
       return false;
   }    
   if (number.length > 1 && charCode == 46 ) {
       return false;
   }
   //get the carat position
   //2 decimal values after decimal point (and only one decimal character)
   var caratPos = getSelectionStart(el);
   var dotPos = el.value.indexOf(".");
   if (caratPos > dotPos && dotPos > -1 && (number[1].length > 1)) {
       return false;
   }
   return true;
}

function getSelectionStart(o) {
   return o.selectionStart
}

当字段突出显示时,键入 5. 之类的值不是问题。它按预期工作。只有当“。” 是在这种情况下出现问题的第一个键入的字符。

我如何包含charCode == 190 && charCode == 110以便可以随时输入它们(无论字段是否突出显示,但只有一次)

尝试 Daut 的建议

$(document).ready(function () {           

 $("input:text, form").on('keydown', function (e) {

    if ((e.keyCode == 190 || e.keyCode == 110)) {

        this.value = "0.";
    }
 });
});

这种尝试允许在突出显示的值上键入一个小数点,但是即使在 on 键入了 5 时,每个输入都会发生这种情况。然后它将恢复为 0。,我怎样才能过滤掉它,只在小数点是输入的第一个字符..

标签: javascriptjquery

解决方案


推荐阅读