javascript - 减号和点用 replace() 清除输入类型数字字段

标签 javascript

我使用 replace() 从输入字段中删除非数字字符,如下所示:

<input type="number" oninput="this.value = this.value.replace(/[^\d]/g,'');">

它运行良好,但是当我输入几个数字后跟一个减号或一个点(在 Android 上它必须是两个点)时,整个字段被清除。这仅在输入类型设置为“数字”时发生,而不是在设置为“文本”时发生,但我需要“数字”才能在移动设备上显示数字键盘。

为什么会这样?

澄清一下,我只想允许 [0-9],而不是其他可能的数字字符,例如 [.-e]。

最佳答案

解决方法:

function cancelEvent(event) {// cross-browser code
  event.cancelBubble = true;
  event.returnValue = false;
  if(event.stopPropagation)
    event.stopPropagation();
  if(event.preventDefault)
    event.preventDefault();
}

document.getElementById('testInput').addEventListener('keydown', function(event) {
  var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;// cross-browser code
  if(keyCode != 8 && (keyCode < 48 || keyCode > 57)){// excludes non-numeric inputs
    cancelEvent(event);
  }
});

document.getElementById('testInput').addEventListener('textInput', function(event) {
  event = window.event || event;// cross-browser code
  if(/[^0-9]/.test(event.data)) {
    cancelEvent(event);
  }
});
<input type="number" id="testInput">

我从这个答案中提取了部分跨浏览器代码:https://stackoverflow.com/a/585590/3514976

关于javascript - 减号和点用 replace() 清除输入类型数字字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43761396/

相关文章:

javascript - AngularJS( ionic 框架)-更改 Controller 内的状态似乎不起作用

javascript - 使用正则表达式匹配 javascript 中的引号包裹字符串

javascript - 为什么我不能直接从我的用户脚本生成 'click' 事件?

javascript - AJAX 调用和丰富的 Internet 应用程序

javascript - 更改 JavaScript 中的函数上下文(用于访问局部变量)

javascript - 将 fetch 转换为在 jquery 中正确使用 $.ajax ?

javascript - 如何处理固定日期的突变?

javascript - 处理对脚本的多次调用

javascript - 如何防止ASP :Button from posting back from a jQuery click handler

c# - 在 httppost 之后关闭模式窗口