如何使用javascript/jquery防止在HTML文本字段中键入小数点?

如何使用javascript/jquery防止在HTML文本字段中键入小数点?,javascript,jquery,html,Javascript,Jquery,Html,我有一个文本字段,用户将在其中输入一个数字,我希望该数字是一个整数。为此,我想在用户键入小数点时忽略它 目前,我有一个javascript函数,用于检查keyup上字段的值,如果最近键入的字符是小数点,则会将其删除。这将创建一种效果,用户键入小数点,小数点出现,然后消失。有没有办法使小数点完全不显示?使用按键事件: 使用.keydown()上的一个函数检查按下哪个键。如果是“.”,preventDefault() 小提琴: 编辑:将阻止用户添加到ctr+v。//除非按下数字键,否则不要执行任何

我有一个文本字段,用户将在其中输入一个数字,我希望该数字是一个整数。为此,我想在用户键入小数点时忽略它


目前,我有一个javascript函数,用于检查keyup上字段的值,如果最近键入的字符是小数点,则会将其删除。这将创建一种效果,用户键入小数点,小数点出现,然后消失。有没有办法使小数点完全不显示?

使用按键事件:


使用
.keydown()
上的一个函数检查按下哪个键。如果是“.”,
preventDefault()

小提琴:

编辑:将阻止用户添加到ctr+v。

//除非按下数字键,否则不要执行任何操作
// don't do anything unless a number key is pressed
$("input").on("keypress", function(event) {
  if (event.which < 48 || event.which > 57) {
    event.preventDefault();
  }
});
$(“输入”)。在(“按键”,功能(事件){ if(event.which<48 | | event.which>57){ event.preventDefault(); } });
这也许不是最用户友好的解决方案——以某种方式将字段标记为无效并要求他们更正会更友好——但这将保证您得到一个整数


当数据包含小数点或任何其他符号或字母时,这将阻止用户提交数据。还有其他方法可以阻止用户,甚至可以通过检查键代码来输入这些字符,但我发现将两者结合起来更容易,因为有时我需要小数点,有时我不需要

Javascript:

function NoDecimal(o)
{
    if (o.value.length > 0) 
    {
        var objReg = /^\d{0,10}?$/;
        if (objReg.test(o.value))
        {
            o.style.borderColor='';
            o.style.fontWeight='normal';
            document.getElementById('submit').disabled = false;
        }
        else
        {    
            o.style.borderColor='red';
            o.style.fontWeight='bold';
            document.getElementById('submit').disabled=true;
        }    
        return false;
    }
}
HTML:

编号:

您还可以使用onkeyup、onkeydown、onkeypress和oninput,但较旧的浏览器不将oninput作为html5的一部分来处理。尤其是早期的Internet Explorer版本

允许所有输入,但在键入无效内容时显示请求整数的消息将更加方便用户。我计划在用户输入小数点时显示一条消息,并将其删除。别忘了,用户始终可以粘贴(ctrl+v)或拖动字符。您应该重新检查整个项目的值并去掉小数,而不是阻止按键。或者,在
change
事件中执行此操作,而不是在
190
¾
,而不是
。如果(kCode==190 | | kCode==110)修复numpadProblem,这里可能是keyup,键代码可能因用户文化而异,这就是为什么对于此类任务,最好使用返回字符代码而不是键代码的keypress事件是的,你是对的,但我们的答案都是,我们仍然可以使用ctr+v添加“.”。。。我必须解决这个问题!也您不需要
var kCode=(e.which | e.keyCode)
-jQuery将keyCode规范化为
e.which
,因此只需测试“用户键入一个小数点,它出现,然后消失”OP不需要这种行为,因为否则粘贴处理程序中的输入值将是旧值,而不是更新值。尝试从JSFIDLE中删除超时,你会明白我在说什么(例如使用ctrl+v将值粘贴到输入中)嗯,当按下一个点时删除输入中的所有内容并不是真正需要的,是吗?@Bergi当然不是,但因为这不是一个真正的操作请求,所以我不会在这方面花费太多时间。使用parseInt()更适合于sure@Bergi现在看起来好多了。顺便说一句,不需要对indexfor进行测试,只需
self.value=self.value.replace(/\./g,”)
// don't do anything unless a number key is pressed
$("input").on("keypress", function(event) {
  if (event.which < 48 || event.which > 57) {
    event.preventDefault();
  }
});
function NoDecimal(o)
{
    if (o.value.length > 0) 
    {
        var objReg = /^\d{0,10}?$/;
        if (objReg.test(o.value))
        {
            o.style.borderColor='';
            o.style.fontWeight='normal';
            document.getElementById('submit').disabled = false;
        }
        else
        {    
            o.style.borderColor='red';
            o.style.fontWeight='bold';
            document.getElementById('submit').disabled=true;
        }    
        return false;
    }
}
Number: <input type="text" onkeyup="NoDecimal(this);">