2011-06-14 123 views
2

我在javascript写了下列的函数:类型错误:表达式“input.replace”的结果[未定义]不是函数

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和字符串1是从文本框。我打电话的第二个功能是这样的:

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

更新2:
我是错的第二个功能......这是:

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

所以我的功能不起作用与阵列。不幸的是我不知道如何去改变它:(

+0

什么是array1?一个什么样的数组?字符串? – Lekensteyn 2011-06-14 13:28:24

+0

是的,我认为是。但说实话,我不是100%确定的,因为它是由XML解析器生成的......有什么方法可以检查它吗?像PHP中的var_dump一样? – 2011-06-14 13:38:34

+1

一些PHP函数已经在Javascript中实现,['var_dump'](http://phpjs.org/functions/var_dump:604)就是其中之一。 – Lekensteyn 2011-06-14 13:55:58

回答

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 - >string with multiple spaces in it),你也可以使用简化RE:

/\s+/g 

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

+0

不是一切都是正确的!我认为阵列是问题(请参阅更新2) – 2011-06-14 13:23:25

+0

@Freddy:更新 – Lekensteyn 2011-06-14 13:47:17

+0

感谢您的解决方案! – 2011-06-14 13:54:43

1

我认为input是你输入文本框的东西?

在这种情况下,输入不必为它定义一个replace()功能,用户要确保。你在一个字符串调用replace() - 里面输入的值,而不是输入自己试试这个:

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

它不起作用:(消息是:'TypeError:表达式的结果'输入。值'[未定义]不是函数.'。输入不是真正的文本字段(请参阅更新1)。 – 2011-06-14 12:27:33

+0

啊,我陷入了困境。那么这没什么不妥。我会仔细检查你的jQuery参考 - 确保正确的版本和只有一个版本的目标。 – Kon 2011-06-14 12:32:31

+0

Mmmhhh我看到我犯了一个错误。第二个参数是一个数组,没有字符串,这似乎是问题(请参阅更新2)。但我不知道如何处理它... – 2011-06-14 13:11:07

相关问题