2013-11-25 69 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