如何防止输入框中的数字只显示文本?

时间:2012-11-12 07:34:02

标签: javascript

我找到了一个可行的脚本,但我不知道它是如何工作的。

这个例子使用的split()方法给了我痛苦的头痛。有没有人知道split()方法在这个例子中是如何工作的?我们可以将数字作为第一个参数传递给split()方法吗?这是一个分隔符,如果是为什么它没有用引号括起来?

脚本

function noNumbers(field) {
   for ( var i = 0; i < 10; i++ ) {
      field.value = field.value.split(i).join("");
    }
}

HTML

   <form>
   Type some text (numbers not allowed):
    <input type="text" onkeyup="noNumbers(this);" />
   </form>

2 个答案:

答案 0 :(得分:1)

基本上noNumbers接受字符串并将其拆分为给定令牌的数组,在这种情况下,数字存储在i中。然后,通过在部件之间使用空字符串再次连接数组。

由于您对所有数字执行此操作,因此结果不包含任何数字。

实施例

"1213Test".split(0).join("")
  == ["1213Test"].join("")
  == "1213Test"

"1213Test".split(1).join("")
  == ["","2","3Test"].join("")
  == "23Test"

"23Test".split(2).join("")
  == ["","3Test"].join("")
  == "3Test"

"3Test".split(3).join("")
  == ["","Test"].join("")
  == "Test"

如果您感到困惑,因为i是一个整数:split将字符串作为参数,因此split(i)split(i.toString())相同。

答案 1 :(得分:0)

本例中的脚本循环使用小数位数0, 1, 2...9,并为每个数字生成split(digit).join()。 split方法返回没有数字的字符数组。像:

"This 1s an example".split(1)
["This ", "s an example"]

使用join("")它只是将数组连接回字符串:

["This ", "s an example"].join("")
"This s an example"