我有这个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的字符或输入到输入中的句点,如果存在,则应该将该输入的值设置为它是什么,减去最后一个字符(非数字字符)。
我的问题是,它不是用我的新字符串替换输入的值,而是简单地清除输入。知道为什么吗?你能找到解决方法吗?任何帮助将非常感激。谢谢!
P.S。请定期JavaScript答案。没有jQuery,如果你不介意的话。
这可能与作为数字输入的输入类型有关。不幸的是,除非绝对必要,否则需要保持不变。
我已将其缩小到事实,问题是由输入类型=数字引起的。这很奇怪,因为像这样设置输入的值
document.getElementById('myinput').value='68';
工作正常
答案 0 :(得分:2)
你要删除最后一个字符两次。首先是
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)'/>
答案 1 :(得分:0)
你的功能几近完美。 但有两个问题:
取最后一个角色&#34; b&#34;进入&#34; c&#34;检查是否长度 b大于1.否则你只是杀死每一个角色 正在输入。
不要对最后一个字符进行切片,子字符串已经在进行 在if循环中,每个字符都会剪切2个字符 添加。只有子串并指定&#34; b&#34;回到元素。
你将全力以赴。
答案 2 :(得分:0)
因为显然保留input type=number
会导致跨浏览器头痛,在这种情况下,我建议使用text
类型,并且此代码:
function a(elem){
b=elem.value;
elem.value=b.replace(/[^0-9.]+/,'');
};
这应该替换所有不需要的字符,如果用户尝试键入它,如果移动了光标,如果用户按住并保持键(不确定paste
,但是:))...
所以,检查整个字符串,而不是最后一个字符,并替换除数字和点之外的所有内容......
答案 3 :(得分:-1)
当您将输入类型设置为“数字”时,您不需要对数字进行任何检查 - 输入框会处理该数字并忽略非数字字符。问题是当你输入一个额外的“。”当你已经得到一个浮点数时,输入元素的行为是清除整个输入,而不是在{% include 'templatename' %}
中使其可用,并将elem.value
设置为elem.valueAsNumber
。也就是说,您无法检索以前键入的其余内容 - 至少在Chrome控制台20分钟黑客攻击并检查MDN后,我找不到任何内容。
如果您愿意制作“文字”类型的框,则以下内容将起作用并且相当干净。否则,不知道如何为你解决这个问题。
NaN