我已经阅读了许多类似的问题。一些解决方案有效。但是,我能让它工作的唯一方法是允许输入字符,然后将其删除。它看起来很乱,感觉很乱。
如何防止首先输入字符?
演示:https://jsfiddle.net/jf8bqp5z/
HTML:
<input type="text" name="test" id="test"/>
jQuery的:
$('#test').keyup(function(e){
var $this = $(this);
var val = $this.val();
if( val.indexOf('.') ){
val = parseInt(val);
$this.val(val);
e.preventDefault();
}
});
解
其实很简单。我已为keyup
切换keydown
事件,只是查找keyCode:
$('#test').keydown(function(e){
var $this = $(this);
var val = $this.val();
if( e.keyCode === 65 ){ //Here provide the JavaScript event keycode of the key to prevent being typed.
e.preventDefault();
}
});
演示:https://jsfiddle.net/j80hryvm/
注意:您可以从http://keycode.info/
获取密钥代码答案 0 :(得分:1)
我找到了这个answer,它从不打印你不想要打印的字符。
您可以通过阻止keyPress事件来完成此操作 发生非数字值
例如(使用jQuery)
$('.input-selector').on('keypress', function(e){
return e.metaKey || // cmd/ctrl
e.which <= 0 || // arrow keys
e.which == 8 || // delete key
/[0-9]/.test(String.fromCharCode(e.which)); // numbers
})
这说明了所有不同类型的输入(例如来自的输入) 数字键盘具有与键盘不同的代码)以及 退格,箭头键,控制/ cmd + r重新加载等
答案 1 :(得分:0)
您可能需要return false
:
$('#test').keyup(function(e){
var $this = $(this);
var val = $this.val();
if( val.indexOf('.') ){
val = parseInt(val);
if (val == NaN)
return false;
$this.val(val);
e.preventDefault();
}
});