我有这个 JavaScript 函数:
function a(elem) {
b = elem.value;
c = b.substring(b.length - 1);
if (c !== '1' && c !== '2' && c !== '3' && c !== '4' && c !== '5' && c !== '6' && c !== '7' && c !== '8' && c !== '9' && c !== '0' && c !== '.') {
elem.value = b.slice(0, -1);
}
};
该函数将应用于数字输入,如下所示:
<input type='number' onkeyup='a(this)'/>
该函数的重点是检测输入中是否有非 0-9 的字符或句点,如果有,则应该将该输入的值设置为原来的值,减去最后一个字符(非数字字符)。
我的问题是,它不是用新字符串替换输入的值,而是简单地清除输入。知道为什么吗?你能找到解决办法吗?任何帮助将非常感激。谢谢!
附注请只提供常规 JavaScript 答案。没有 jQuery,如果你不介意的话。
注意
这可能与输入的类型是数字输入有关。不幸的是,除非绝对必要,否则需要保持不变。
编辑#2
我已经缩小范围,发现问题是由输入类型=数字引起的。这很奇怪,因为像这样设置输入的值
document.getElementById('myinput').value='68';
工作正常
最佳答案
您将最后一个字符删除两次。首先是
b = b.substring(0, b.length - 1);
再次:
elem.value = b.slice(0, -1);
执行其中之一,但不能同时执行两者。
function a(elem) {
b = elem.value;
c = b.substring(b.length - 1);
if (c !== '1' && c !== '2' && c !== '3' && c !== '4' && c !== '5' && c !== '6' && c !== '7' && c !== '8' && c !== '9' && c !== '0' && c !== '.') {
elem.value = b.slice(0, -1);
}
};
<input type='text' onkeyup='a(this)'/>
关于javascript - 检测非数字字符的功能不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32513612/