只允许粘贴数字,而不在纯JavaScript中使用输入数字

只允许粘贴数字,而不在纯JavaScript中使用输入数字,javascript,Javascript,在您进一步阅读之前,请查看我的答案和Priyal Pithadiya的答案,了解两种不同的方法 我有一个客户对我昨天得到的答案不满意。基本上,我有一个脚本,可以防止在输入中插入非数字字符。当你打字的时候,它工作得很好,但是我这里有一个问题,我不知道如何防止粘贴非数字 我的客户表示他希望避免使用输入号码,因为这是这里提供的解决方案,但出于个人原因,他说他需要使用输入文本 如果我必须改变我的代码来得到这样的结果,我会的 请注意,我不能使用jQuery,我的解决方案只能是javascript 这是我的

在您进一步阅读之前,请查看我的答案和Priyal Pithadiya的答案,了解两种不同的方法

我有一个客户对我昨天得到的答案不满意。基本上,我有一个脚本,可以防止在
输入中插入非数字字符。当你打字的时候,它工作得很好,但是我这里有一个问题,我不知道如何防止粘贴非数字

我的客户表示他希望避免使用
输入号码
,因为这是这里提供的解决方案,但出于个人原因,他说他需要使用
输入文本

如果我必须改变我的代码来得到这样的结果,我会的

请注意,我不能使用jQuery,我的解决方案只能是javascript

这是我的代码:

//防止非数字按键
document.querySelector(“#仅限数字”).addEventListener('keypress',preventNonNumbersInput);
函数预防NonNumbersInInput(事件){
var characters=String.fromCharCode(event.which);
如果(!(/[0-9]/.test(字符))){
event.preventDefault();
}
}
//防止粘贴非数字只能粘贴数字
document.querySelector(“#仅限数字”).addEventListener(“粘贴”,粘贴测试);
函数测试(){
//???
}
如果需要,可以使用事件

<input type="text" id='numbers-only' onchange="removeChars()">

function removeChars() {
  var input = document.getElementById('numbers-only');
  input.value = input.value.replace(/[^0-9]/g, '');
}

函数removeChars(){
var input=document.getElementById('numbers-only');
input.value=input.value.replace(/[^0-9]/g');
}

@尝试给定的解决方案

document.querySelector(“#仅限数字”).addEventListener('keypress',preventNonNumbersInput);
函数预防NonNumbersInInput(事件){
var characters=String.fromCharCode(event.which);
如果(!(/[0-9]/.test(字符))){
event.preventDefault();
}
}
document.querySelector(“#仅限数字”).addEventListener(“粘贴”,粘贴测试);
功能测试(事件){
window.setTimeout(()=>{
变量字符=event.target.value;
window.setTimeout(()=>{
如果(!(/^\d+$/.test(字符))){
event.target.value=event.target.value.replace(/\D/g');
}
});
});
}

感谢Priyal Pithadiya的帮助,我想发布两个版本的Priyal Pithadiya示例,从早期到现在,其中包括两个版本,其中一个版本随附

一个onpaste示例和另一个示例基于paste使用addEventListener。这是供将来阅读本文的读者使用的。所有的功劳都归于普里亚尔·皮塔迪亚

使用onpaste

document.querySelector(“#仅限数字”).addEventListener('keypress',preventNonNumbersInput);
函数预防NonNumbersInInput(事件){
var characters=String.fromCharCode(event.which);
如果(!(/[0-9]/.test(字符))){
event.preventDefault();
}
}
函数myFunction(e){
var el=e;
setTimeout(函数(){
el.value=el.value.replace(/\D/g');
}, 0);
}

只需使用
输入
事件,而不是
按键
事件,它可以处理所有可能的输入方法,包括拖放和粘贴。不过,修改非法值需要一种稍微不同的方法。我不能使用jquery,我必须使用纯js,这是客户端所说的:(再次感谢Priyal Pithadiya的回复,Ok对此表示抱歉,但我如何使用.addEventListener('paste'而不是onpaste=“myFunction(this);”我知道这很奇怪,但他喜欢使用addEventListener的代码这是有原因的,他说这是个人原因的,只是说我试图在输入标记中使用类似的东西,他说你必须在这个项目中使用addEventListener。我试图用事件侦听器触发myFunctionPriyal Pithad来编辑你的代码iya我给他发了代码,我知道他会对我说的话说些什么他说myFunction必须由该项目的事件侦听器触发我试图说服他,但他说你不能使用onpaste=“myFunction(this);”对于这个项目,我知道这很奇怪,但在事件侦听器触发的地方将其更改,所以我现在做错了,这就是我正在做的document.querySelector(“#仅限数字”).addEventListener('paste',myFunction);但它不适用于事件侦听器。告诉他们参考FewFlyBy感谢您的响应,但代码示例不起作用它的行为就像从未提供解决方案一样:(.它仍然允许我粘贴字母。您可以共享您的FIDLE链接吗?不,它不起作用:(在let input之前假设有一个var吗?