Не могу использовать динамическое имя массива с JQuery - PullRequest
2 голосов
/ 23 июня 2011

Я пытаюсь перебрать массивы, чтобы получить информацию о стране для выпадающего списка.

Это массивы:

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 в прошлом проекте для этого, динамическая переменная не была проблемой.) Если я вместо этого использую $ (array_states_MX) и $ (array_states_names_MX), то это работает. Но значение countryISO должно быть динамичным.

Какой правильный синтаксис для этой работы?

Ответы [ 3 ]

4 голосов
/ 23 июня 2011

вы можете использовать объект window, поскольку там хранятся все глобальные переменные.

tmpArry = 'array_states_'+countryISO;
$(window[tmpArry]).each(){}

альтернативно, почему бы не использовать вложенные массивы вместо того, чтобы называть их отдельными вещами?

array_states[countryISO]
0 голосов
/ 23 июня 2011

Я лично реструктурировал бы это полностью, чтобы использовать объекты ..

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]));
    }
}

рабочая демонстрация на http://jsfiddle.net/gaby/6gbWJ/

0 голосов
/ 23 июня 2011

Чтобы решить проблему как есть, вам нужно использовать eval() в переменных tmpArray и tmpArrayNames:

var tmpArray = eval('array_states_' + countryISO);

eval - опасная функция, которую вы должны избегать, реструктурируя свой код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...