1

此问题涉及仅允许在输入文本字段中输入数字字符。我需要做同样的事情,除了必须允许负号和小数。该解决方案还需要在 Mobile Safari 中运行,适用于iOS 6iOS 7

我已经测试了基于在 keyup 事件处理程序中检查键码的公认解决方案,该解决方案在我的iPad上不起作用,因为它允许输入以下字符:

()$&@!

以下代码基于此解决方案

('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验证不安全。

4

1 回答 1

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();
    }
});
于 2017-03-24T03:47:53.543 回答