TypeError:表达式'input.replace'[undefined]的结果不是函数

时间:2011-06-14 12:17:10

标签: javascript

我在javascript中编写了以下函数:

function maskString(input) {
  return input.replace(/\s\s+/," ");
}

很简单。 在我写的第二个函数中:

function secondFunction(string1, string2) { //Attetion! See Update 2!
  var string1masked = maskString(string1);
  var string2masked = maskString(string2);
  ( ... )
}

错误消息是: TypeError: Result of expression 'input.replace' [undefined] is not a function.

有人有想法吗?谷歌并没有真正的帮助:\

更新1:
我正在使用jQuery,string1来自文本框。我正在调用第二个函数:

var bool = secondFunction (textarea1.val(), textarea2.val()); //Attetion! See Update 2!

更新2:
我错了第二个功能......它是:

function secondFunction(string1, array1) {
  var string1masked = maskString(string1);
  var array1masked = maskString(array1);
  ( ... )
}

所以我的函数不适用于数组。不幸的是我不知道如何改变它:(

2 个答案:

答案 0 :(得分:2)

我猜你有这样的代码:

var textarea1 = $("#textarea1");
如果找不到该元素,则

textarea1.val()会返回undefined(即ID为textarea1的元素)。检查您是否在元素选择器中输入了拼写错误,以及在元素可用后调用该函数。

此函数适用于包含字符串的字符串和数组。如果参数或数组值不是字符串或数组,则它不会触及该值。

function maskData(input) {
    // edit strings
    if (typeof input == "string") return input.replace(/\s\s+/, "");

    // if 'input' is an array, iterate through its elements and pass it to maskData again
    if (input instanceof Array) {
        for (var i=0; i<input.length; i++) {
           input[i] = maskData(input[i]);
        }
        return input;
    }
    // otherwise just return itself untouched
    return input;
    // alternative: return an empty string
    //return "";
}

如果您打算将多个空格转换为单个空格(如string with multiple spaces in it - &gt; string with multiple spaces in it),您还可以使用简化的RE:

/\s+/g

单个空白字符将被单个空格替换。多个空白字符也将被单个空格替换。请注意,我添加了g标志,以便多次更换。

答案 1 :(得分:1)

我认为input是您输入的文本框或其他内容?

在这种情况下,输入没有为其定义replace()函数。您希望确保在字符串上调用replace() - 输入中的值,而不是输入本身。试试这个:

function maskString(input) {
  return input.value.replace(/\s\s+/," ");
}