This question处理只允许在输入文本字段中输入数字字符。我需要做同样的事情,除了必须允许负号和小数。该解决方案还需要在Mobile Safari中运行,适用于 iOS 6 和 iOS 7 。
我已经测试了基于检查 keyup 事件处理程序中的密钥的已接受解决方案,但此解决方案不适用于我的 iPad 因为它允许输入以下字符:
()$&@!
以下代码基于this solution:
('input.numeric').keyup(function(e) {
this.value = (this.value.replace(/[^0-9.\,-]/g, ''));
});
尽管此代码在我测试的桌面浏览器(例如Chrome)中运行良好,但在 Mobile Safari 上,它似乎效果不佳。在 iOS 5 上,这允许输入数字字符和减号,但是它会导致光标位置奇怪,光标经常出现在输入的字符之前。在 iOS 6 上,出于某种原因,这不允许输入减号,只允许输入数字字符。
是否有人在 Mobile Safari 上拥有可正常运行的解决方案。我在这里寻找一个纯粹的Javascript解决方案,或者只依赖于 jQuery 的解决方案。请不要回答“使用此库或该库”或对 Javascript 验证的评论不安全。
答案 0 :(得分:0)
看看这个......
var prevVal = '';
$(".numericValue").on("input", function (evt) {
var self = $(this);
if (self.val().match(/^-?\d*(\.(?=\d*)\d*)?$/) !== null) {
prevVal = self.val()
} else {
self.val(prevVal);
}
if ((evt.which != 46 || self.val().indexOf('.') != -1) && (evt.which < 48 || evt.which > 57) && (evt.which != 45 && self.val().indexOf("-") == 0)) {
evt.preventDefault();
}
});