用于检测不起作用的非数字字符的功能

时间:2015-09-11 00:21:45

标签: javascript html function slice html-input

我有这个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,如果你不介意的话。

注意

这可能与作为数字输入的输入类型有关。不幸的是,除非绝对必要,否则需要保持不变。

编辑#2

我已将其缩小到事实,问题是由输入类型=数字引起的。这很奇怪,因为像这样设置输入的值

document.getElementById('myinput').value='68'; 

工作正常

4 个答案:

答案 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)

你的功能几近完美。 但有两个问题:

  1. 取最后一个角色&#34; b&#34;进入&#34; c&#34;检查是否长度 b大于1.否则你只是杀死每一个角色 正在输入。

  2. 不要对最后一个字符进行切片,子字符串已经在进行 在if循环中,每个字符都会剪切2个字符 添加。只有子串并指定&#34; b&#34;回到元素。

  3. 你将全力以赴。

答案 2 :(得分:0)

因为显然保留input type=number会导致跨浏览器头痛,在这种情况下,我建议使用text类型,并且此代码:

function a(elem){
  b=elem.value;

elem.value=b.replace(/[^0-9.]+/,'');

};

这应该替换所有不需要的字符,如果用户尝试键入它,如果移动了光标,如果用户按住并保持键(不确定paste,但是:))...

所以,检查整个字符串,而不是最后一个字符,并替换除数字和点之外的所有内容......

演示:http://jsfiddle.net/98hnqfyj/2/

答案 3 :(得分:-1)

当您将输入类型设置为“数字”时,您不需要对数字进行任何检查 - 输入框会处理该数字并忽略非数字字符。问题是当你输入一个额外的“。”当你已经得到一个浮点数时,输入元素的行为是清除整个输入,而不是在{% include 'templatename' %}中使其可用,并将elem.value设置为elem.valueAsNumber。也就是说,您无法检索以前键入的其余内容 - 至少在Chrome控制台20分钟黑客攻击并检查MDN后,我找不到任何内容。

如果您愿意制作“文字”类型的框,则以下内容将起作用并且相当干净。否则,不知道如何为你解决这个问题。

NaN