2013-11-25 63 views
0

这里是我的功能:问题与参数传递的JavaScript

function findTextFromValue(source, id){ 
    var returnValue = ''; 
    //source = [{value:1, text:"Champagne"},{value:2, text:"Vallée de la Loire"}, {value:3, text:"Bordelais"},{value:4, text:"Sud-Ouest"},{value:5, text:"Languedoc-Roussillon"},{value:6, text:"Lorraine"},{value:7, text:"Alsace"},{value:8, text:"Jura"},{value:9, text:"Bourgogne"},{value:11, text:"Savoie"},{value:12, text:"Vallée du Rhône"},{value:13, text:"Provence"},{value:14, text:"Corse"},{value:15, text:"Coteaux du Lyonnais"},{value:16, text:"Bugey"}]; 
    //alert(source); 
    $.each(source, function(key, value) { 
     if(value.value == id){ 
      returnValue = value.text; 
      return false;/* BREAK EACH ITERATION*/ 
     } 
    }); 
    return returnValue; 
} 

当源被设置在函数内部,一切都完美的作品。 当源是通过函数参数传递,我得到一个

TypeError: invalid 'in' operand e 

的硬编码阵列是我复制/粘贴从警报的阵列,所以它应该是完全一样的。我错过了什么?

SOLUTION:

source = eval(source); 

更好的解决方案

的eval是邪恶的(有人告诉我...)好答案是:

source = JSON.parse(source); 

那些谁有这个错误:

SyntaxError: JSON.parse: expected property name or '}' 

这意味着你的JSON数组不包含双引号。例如:

[{"value":"1", "text":"Champagne"}, ...] 
+3

你确定你传递一个数组,而不是,例如,一个JSON字符串? –

+2

要了解更多关于源代码的信息,请不要使用'alert'。使用'console.log(source,typeof source);'并打开控制台(F12)。 –

+0

向我们展示一个失败的例子! – deceze

回答

1

您几乎可以肯定地将一个字符串传递给函数而不是实际的数组。我这样说是因为下面的代码重新确切的错误:

var s = '[{value:1, text:"Champagne"},{value:2, text:"Vallée de la Loire"}, {value:3, text:"Bordelais"},{value:4, text:"Sud-Ouest"},{value:5, text:"Languedoc-Roussillon"},{value:6, text:"Lorraine"},{value:7, text:"Alsace"},{value:8, text:"Jura"},{value:9, text:"Bourgogne"},{value:11, text:"Savoie"},{value:12, text:"Vallée du Rhône"},{value:13, text:"Provence"},{value:14, text:"Corse"},{value:15, text:"Coteaux du Lyonnais"},{value:16, text:"Bugey"}]' 

$.each(s,function(key, value) { 
}); 

的jsfiddle:http://jsfiddle.net/7VUgc/(监视控制台的错误)

+0

确实!这是一个字符串,而不是一个数组!它的工作原理是:source = eval(source); – hugsbrugs

+0

@hugsbrugs - [javascript javascript eval](http://blogs.msdn.com/b/ericlippert/archive/2003/11/01/53329.aspx) – Jamiec