Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 确保输入为正整数_Javascript_Html_Jquery_Web - Fatal编程技术网

Javascript 确保输入为正整数

Javascript 确保输入为正整数,javascript,html,jquery,web,Javascript,Html,Jquery,Web,我有一个用于正整数的HTML输入元素。我需要评估这个输入字段,并确保只插入正确的值 函数示例函数(事件、元素){ //如果事件不是退格且不是数字 if(event.which!=8){ //如果事件不是一个数字 if(isNaN(String.fromCharCode(event.which))){ //取消活动 event.preventDefault(); } //如果长度达到极限 否则{ var value=document.getElementById(element.id).valu

我有一个用于正整数的HTML输入元素。我需要评估这个输入字段,并确保只插入正确的值

函数示例函数(事件、元素){
//如果事件不是退格且不是数字
if(event.which!=8){
//如果事件不是一个数字
if(isNaN(String.fromCharCode(event.which))){
//取消活动
event.preventDefault();
}
//如果长度达到极限
否则{
var value=document.getElementById(element.id).value;
var maxLength=document.getElementById(element.id).maxLength;
var valueLength=document.getElementById(element.id).value.length;
如果(valueLength>=maxLength){
//取消活动
event.preventDefault();
}否则{
//将值转换为数字并返回字符串。这意味着前导0将消失。
document.getElementById(element.id).value=Number(value);
}
}
}
};

我建议您使用
.addEventListener()
而不是内联事件处理程序

因此,对于相同的
input
元素,可以添加多个事件。要做您想做的事情,有三个事件:

  • keydown
    防止不允许的按键
  • contextmenu
    用于鼠标粘贴
  • input
    解析输入值
下面的代码段仅将输入限制为number。除数字外,不允许使用点、减号、
e
或任何其他符号

可以通过[CTRL]+[v]或鼠标
contextmenu
进行粘贴。在这两种情况下,我假设
输入的前一个值应该被清除

我把粘贴的负数的情况考虑在内

//获取元素
让myInput=document.querySelector(#exampleInput)
//此事件处理程序仅允许数字、退格和[ctrl]+[v]
myInput.addEventListener(“键控”,函数(事件){
console.log(“Key:,event.Key”)
//如果这是键盘粘贴[CTRL]+[v],
//在粘贴完成之前清除输入值
如果(event.ctrlKey&&event.key==“v”){
console.log(“键盘粘贴”)
this.value=“”
返回;
}
//如果键不是backspace,而是NAN,则它不是数字。
//简而言之,此时只允许使用数字或退格。
if(event.key!=“Backspace”&&isNaN(event.key)){
event.preventDefault();
console.log(“-----------阻止事件”)
}
});
//此处理程序用于“鼠标粘贴”
//在粘贴完成之前,它会清除输入值
myInput.addEventListener(“上下文菜单”,函数(事件){
this.value=“”
})
//此处理程序修复值长度并将其解析为正整数
myInput.addEventListener(“输入”,函数(事件){
console.log(“原始值”,this.value)
//获取maxlength属性值
var maxLength=parseInt(this.maxLength)
//解析该值(将删除任何前导零)并确保其为正
//然后只保留[maxlength]的第一个字符。
var value=Math.abs(parseInt(this.value)).toString().slice(0,maxLength)
console.log(“固定值”,值)
这个值=值;
});
这里我们使用JQuery解决方案

功能

  • 删除焦点上的默认“0”
  • 将最大长度设置为(5)
  • 仅允许数字内容和退格、Del、Home、End、向左箭头、向右箭头、, ctrl+v、ctrl+c、ctrl+a按钮
  • 检查复制的文本是否包含任何数值,然后收集并删除非数值
  • 检查粘贴的文本长度+当前值长度是否满足最大长度
$(文档).ready(函数(){
//焦点位于输入端时,仅删除默认的“0”。
$(“#示例输入”)。在('focus',function()上{
var oldval=$(“#示例输入”).val();
if(oldval<1){
$(“#示例输入”).val(“”);
}
});
/*设置CTRL+V、CTRL+C功能*/
var ctrlprs=假,
ctrlk=17,
mccmd=91,
vk=86,
ak=65,
ck=67;
$(文档).keydown(函数(e){
如果(e.keyCode==ctrlk | | e.keyCode==mccmd)ctrlprs=true;
}).keyup(功能(e){
如果(e.keyCode==ctrlk | | e.keyCode==mccmd)ctrlprs=false;
});
//在keydown中收听输入
$(“#示例输入”)。关于('keydown',函数(e){
var txt=$(“#示例输入”).val();
//[b-空格、结束、起始、左、右、删除]的例外情况
var键=[8,35,36,37,39,46];
var rgx=$.inArray(即,键)<0;
var cnvrt=String.fromCharCode(e.which);
/*允许CTRL+a或c或v*/
如果(ctrlprs&((e.keyCode==ck)| |(e.keyCode==ak)| | |(e.keyCode==vk))){
}如果((txt.length==5)| |(cnvrt.match(/[^0-9]/)| |(e.shiftKey)){
如果((rgx)){
e、 预防默认值();
/*阻止除数字以外的所有文本,并将最大输入值长度设置为(5)*/
}
} 
});
/*绑定粘贴函数以检查剪贴板数据是否符合要求*/
$(“#exampleInput”)。在('paste',函数(e)上{
var oldl=$(“#示例输入”).val();
var oldval=e.originalEvent.clipboardData.getData('text');
if(oldval.match(/[0-9]{1,5}$\d/g)){}else{
//从剪贴板文本中删除所有非数字文本。
var newvar=oldval.replace(/\D/g,“”);
setTimeout(函数(){
//检查(剪贴板[仅数字]+输入值)长度是否等于或小于(5)。
var totlen=旧长度+新长度;

如果(newvar.length>0&&totlen)使用
input
事件并解析
。注意,由于您已经传入
元素
,因此无需执行
getElementById()
。例如:
var value=element.value
element.value=Number(value)
重塑值?@charlietfl如果我使用输入,我无法回滚更改:event.p