使用replace()减号和点清除输入类型编号字段

时间:2017-05-03 13:24:45

标签: javascript

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



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

效果很好,但是当我输入一些数字后跟一个减号或一个点(在Android上它必须是两个点)时,整个字段被清除。这仅在输入类型设置为&#34; number&#34;时才会发生,而不是在它设置为&#34; text&#34;时,但我需要&#34; number&#34;在移动设备上显示数字键盘。

为什么会发生这种情况?

为了澄清,我只想允许[0-9],而不是[。-e]等其他可能的数字字符。

1 个答案:

答案 0 :(得分:2)

这是一个解决方案:

&#13;
&#13;
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);
  }
});
&#13;
<input type="number" id="testInput">
&#13;
&#13;
&#13;

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