更新
我已经修复了有错误的代码,并添加了一个称为key的变量来存储使用keyCode和其中依赖于浏览器的按键代码。
var key = e.which || e.keyCode;
谢谢Donald.McLean :)
如果要在键入时检查是否在写数字(并避免在输入字段中写其他字符),则可以使用此简单函数,并且可以定义允许的元素(包括要过滤的任何元素)。这样,您不仅可以选择整数,还可以选择某些字符组。该示例基于jQuery,将其附加到输入字段。
$('#myInputField').keypress(function(e)
{
var key = e.which || e.keyCode;
if (!(key >= 48 && key <= 57) &&
(key !== 8) &&
(key !== 9) &&
(key !== 37) &&
(key !== 39) &&
(key !== 46))
{
e.preventDefault();
return false;
}
});
如果您使用的不是定义的键,则该键不会出现在该字段中。而且由于Angular.js如今变得越来越强大。您可以创建此指令来在Web应用程序的任何字段中执行此操作:
myApp.directive('integer', function()
{
return function (scope, element, attrs)
{
element.bind('keydown', function(e)
{
var key = e.which || e.keyCode;
if (!(key >= 48 && key <= 57) &&
(key !== 8) &&
(key !== 9) &&
(key !== 37) &&
(key !== 39) &&
(key !== 46))
{
e.preventDefault();
return false;
}
});
}
});
但是,如果要使用ng-repeat并且只需要在一定数量的字段中应用此指令,会发生什么情况。好吧,您可以将上层指令转换为准备接受真值或假值的指令,以便能够确定哪个字段将受到它的影响。
myApp.directive('rsInteger', function() {
return {
restrict: 'A',
link: function (scope, element, attrs) {
if (attrs.rsInteger === 'true') {
element.bind('keydown', function(e)
{
var key = e.which || e.keyCode;
if (!(key >= 48 && key <= 57) &&
(key !== 8) &&
(key !== 9) &&
(key !== 37) &&
(key !== 39) &&
(key !== 46))
{
e.preventDefault();
return false;
}
});
}
}
}
});
要使用此新指令,您只需要在这样的输入类型文本中进行操作,例如:
<input type="text" rs-integer="true">
希望对您有帮助。