我正在尝试通过数组进行迭代以获取下拉列表的国家/地区信息。
这些是数组:
var array_states_US = new Array("AL", "AK", "AR")
var array_states_names_US = new Array("Alabama", "Alaska", "Arkansas")
var array_states_MX = new Array("AG", "BN", "BS")
var array_states_names_MX = new Array("Aguascalientes", "Baja California", "Baja California Sur")
这是功能:
function buildDropdown(countryISO){
var tmpArry = 'array_states_' + countryISO;
var tmpArryNames = 'array_states_names_' + countryISO;
$(tmpArry).each(function(i) {
$(stateSelectId).append($("<option></option>").attr("value", this).text($(tmpArryNames)[i]));
});
}
但JQuery将$(tmpArry)和$(tmpArryNames)视为字符串而不是数组值。 (当我在过去的项目中使用MooTools时,动态var不是问题。)如果我使用$(array_states_MX)和$(array_states_names_MX)代替,那么它可以工作。但countryISO值必须是动态的。
使这项工作的正确语法是什么?
答案 0 :(得分:4)
您可以使用window
对象,因为所有全局变量都存储在那里。
tmpArry = 'array_states_'+countryISO;
$(window[tmpArry]).each(){}
或者,为什么不使用嵌套数组而不是将它们命名为单独的东西?
array_states[countryISO]
答案 1 :(得分:0)
要解决现在的问题,您需要在eval()
和tmpArray
变量上使用tmpArrayNames
:
var tmpArray = eval('array_states_' + countryISO);
然而 eval
是一项危险的功能,您应该通过重构代码来避免这种功能。
答案 2 :(得分:0)
我个人会完全重构这个以使用对象..
var isoStates = {
'US': {
'AL': 'Alabama',
'AK': 'Alaska',
'AR': 'Arkansas'
},
'MX': {
'AG': 'Aguascalientes',
'BN': 'Baja California',
'BS': 'Baja California Sur'
}
};
function buildDropdown(countryISO){
var states = isoStates[countryISO];
for(state in states)
{
$(stateSelectId).append($("<option></option>").attr("value", state).text(states[state]));
}
}
的工作演示