JavaScript, .split (), реализовать дополнительную переменную - PullRequest
0 голосов
/ 17 декабря 2011

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

//countries array
var countries = Object();
countries['Africa'] = '|Algeria|Angola|Benin';

//state array
var city_states = Object();
city_states['United States'] = '|Washington DC||Alabama|Alaska';

это массив для городов США, но я хочу добавить сокращение штата, например: DC, AL, AK и т. Д. Для отправки в меню, например:

function setRegions()

    {
        for (region in countries)
            document.write('<option value="' + region + '">' + region + '</option>');
    }

function set_country(oRegionSel, oCountrySel, oCity_StateSel)
{
    var countryArr;
    oCountrySel.length = 0;
    oCity_StateSel.length = 0;
    var region = oRegionSel.options[oRegionSel.selectedIndex].text;
    if (countries[region])
    {
        oCountrySel.disabled = false;
        oCity_StateSel.disabled = true;
        oCountrySel.options[0] = new Option('SELECT COUNTRY','');
        countryArr = countries[region].split('|');
        for (var i = 0; i < countryArr.length; i++)
            oCountrySel.options[i + 1] = new Option(countryArr[i], countryArr[i]);
        document.getElementById('txtregion').innerHTML = region;
        document.getElementById('txtplacename').innerHTML = '';
    }
    else oCountrySel.disabled = true;
}

function set_city_state(oCountrySel, oCity_StateSel)
{
    var city_stateArr;
    oCity_StateSel.length = 0;
    var country = oCountrySel.options[oCountrySel.selectedIndex].text;
    if (city_states[country])
    {
        oCity_StateSel.disabled = false;
        oCity_StateSel.options[0] = new Option('SELECT NEAREST DIVISION','');
        city_stateArr = city_states[country].split('|');
        for (var i = 0; i < city_stateArr.length; i++)
            oCity_StateSel.options[i+1] = new Option(city_stateArr[i],city_stateArr[i]);
        document.getElementById('txtplacename').innerHTML = country;
    }
    else oCity_StateSel.disabled = true;
}

function print_city_state(oCountrySel, oCity_StateSel)
{
    var country = oCountrySel.options[oCountrySel.selectedIndex].text;
    var city_state = oCity_StateSel.options[oCity_StateSel.selectedIndex].text;
    if (city_state && city_states[country].indexOf(city_state) != -1)
        document.getElementById('txtplacename').innerHTML = city_state + ', ' + country;
    else document.getElementById('txtplacename').innerHTML = country;
}

Я думал о добавлении дополнительного массива сокращений состояний, но я думаю, что добавление простой аббревиатуры состояний в уже построенный массив было бы просто замечательно, если добавить другое значение в setregions () и иметь + сокращение + вместо + region + , Есть идеи как это реализовать? -Спасибо.

1 Ответ

1 голос
/ 17 декабря 2011

Если у вас есть массив состояний (объектов), а не массив строк, вы можете сделать что-то вроде этого:

function State(longName, shortName) {
    this.longName = longName;
    this.shortName = shortName;
}

Я не знаю, что такое аббревиатуры, но сохраняйте их в своем массиве
var cityStates = "Штат: Abbrev | Вашингтон, округ Колумбия: WDC | ETC: etc"

var stateNames = cityStates.split("|");

var states = new Array(stateNames.length);

for (i=0; i<states.length; i++)
    var longName = stateNames[i].split(":")[0];
    var shortName = stateNames[i].split(":")[1];
    states[i] = new State(longName,shortName);
}

Это даст вам новый массив "состояний" с 50 объектами состояний, каждый из которых может быть вызван так:

states[0] //(returns a State object at index 0)
states[0].longName //(returns the long name)
states[0].shortName //(returns the abbreviated name)
...