首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不带多个小数的Input[type=number]

问不带多个小数的Input[type=number]
EN

Stack Overflow用户
提问于 2020-09-30 13:04:29
回答 1查看 50关注 0票数 0

我想做一个禁止多个小数和包括字母e在内的所有非数字的inputtype=number。问题是,适用于inputtype=text的正则表达式不适用于inputtype=number。

当我登录控制台时,输入的带有多个小数的数字的值是空的。

以下是Codepen:https://codepen.io/btn-ninja/pen/oNxRoJN?editors=1111

HTML

代码语言:javascript
复制
  <input type="number" 
   class="isDecimal" 
   placeholder="Type 2.3.4 and watch console"
   maxlength="20"> 

JS

代码语言:javascript
复制
$('.isDecimal').on("input", function(e) {
  var num = $(this).val().toString();
  console.log(num);
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-30 13:44:17

​

代码语言:javascript
复制
let lastValidInputValue;
let selectedDot = false;


const onKeypress = (e) => {
  if (e.key === "." && e.target.value.indexOf(".") !== -1 && !selectedDot) e.preventDefault();
  selectedDot = false;

  if (e.key === "e") e.preventDefault();
};


const onInput = (e) => {
  if (
    e.target.value.indexOf(".") < e.target.value.length - e.target.getAttribute("data-toFixed") - 1 &&
    e.target.value.indexOf(".") !== -1
  ) {
    let newValue;
    newValue = e.target.value.slice(
      0,
      e.target.value.indexOf(".") +
        parseInt(e.target.getAttribute("data-toFixed")) +
        1
    );
    newValue = parseFloat(newValue);
    e.target.value = newValue;
  }
  if (e.target.value !== "") {
    lastValidInputValue = e.target.value;
  } else if (e.inputType.match(/delete/g)) {
    lastValidInputValue = "";
  } else {
    e.target.value = lastValidInputValue;
  }
};

 const onSelect = (e) => {
   if(window.getSelection().toString().indexOf(".") > -1) selectedDot = true;
 }
代码语言:javascript
复制
<input type="number" id="myNumber" name="myNumber" data-toFixed="2" step="any" onkeypress="onKeypress(event)" oninput="onInput(event)" onselect="onSelect(event)">

​

此原件发布在此question中

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64131225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档