Создание 2-уровневого взаимозависимого списка выбора - PullRequest
2 голосов
/ 07 мая 2011

Я просмотрел StackOverflow и нашел пару вопросов / ответов, которые близки, но не точны для моей ситуации.Я следую этому примеру:

http://www.javascriptkit.com/javatutors/selectcontent2.shtml

И мой код JavaScript выглядит так:

var cityList = document.selectionForm.cityListBox;
var cities = new Array();

cities[0] = "";
cities[1] = ["Eugene|eugeneValue", "Portland|portlandValue", "Salem|salemValue"];
cities[2] = ["Bellingham|bellinghamValue", "Onalaska|onalaskaValue", "Seattle|    seattleValue"];

function updateCities(cityGroup) 
{
    cityList.options.length = 0;

    if (cityGroup > 0)
    {
        for (i = 0; i < cities[cityGroup].length; i++)
        {
            cityList.options[cityList.options.length] = new Option(cities[cityGroup][i].split("|")[0], cities[cityGroup][i].split("|")[1]);
        }   
    }
}

И мой код HTML выглядит так:

<form name="selectionForm">
    <select name="stateListBox" size="3" style="width: 150px" onchange="updateCities(this.selectedIndex);">
        <option selected>Select a State >></option>
        <option value="oregon">Oregon</option>
        <option value="washington">Washington</option>
    </select>

    <select name="cityListBox" size="3" style="width: 150px" onclick="alert(this.options[this.options.selectedIndex].value);">
    </select>
</form>

Насколько я могу судить, это должно работать, как описано по ссылке выше.У меня был большой опыт работы с сайтом JavaScript Kit, но в этот раз я думаю, что что-то упустил.

Когда я действительно публикую это на странице, я могу щелкнуть по штатам, но в окне города ничего не появляется, как ожидается.

Кто-нибудь может увидеть проблему здесь?* Любая помощь приветствуется.

PS - Я прошу прощения, если есть двойной пост, который я пропустил.Любые ссылки также приветствуются.

Ответы [ 3 ]

5 голосов
/ 07 мая 2011

Более читаемое решение с использованием jQuery, которое не требует синхронизации двух списков (штаты и города определены в структуре данных javascript)

HTML:

<form name="selectionForm">
    <select name="states" id="states" size="3" style="width: 150px">
        <option selected>Select a State >></option>
    </select>

    <select name="cities" id="cities" size="3" style="width: 150px"></select>
</form>

JavaScript:

jQuery(function($) {
    initCities();

    function initCities() {
        var statesAndCities = {
            'Oregon': ['Eugene', 'Portland', 'Salem'],
            'Washington': ['Bellingham', 'Onalaska', 'Seattle']
        };

        //populate states
        $.each(statesAndCities,function(k,v){$('#states').append('<option>' + k + '</option>');});

        //populate cities
        $('#states').change(function(){
            var $cities = $('#cities');
            $cities.html("");
            var cities = statesAndCities[$(this).val()];
            $.each(cities,function(k,v){$cities.append('<option>' + v + '</option>');});
        });
    }

});

демо

http://jsfiddle.net/82frv/1/

3 голосов
/ 07 мая 2011

в цикле for в updateCities, оператор начинается с citylist.options, с изменения citylist на cityList (заглавная L)

Тогда будет работать.

1 голос
/ 07 мая 2011

Всего две вещи:

  • Вам нужен document.forms.selectionForm, формы находятся в этой коллекции

  • Способ выполнения сценариянаписано, он должен быть размещен на странице после тега, потому что он пытается получить к нему немедленный доступ

Никаких других изменений не требуется.

...