2

我浏览了 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 - 如果我错过了一个重复的帖子,我深表歉意。任何参考资料也非常感谢。

4

3 回答 3

5

使用 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/

于 2011-05-06T20:40:49.123 回答
3

在 for 循环中updateCities,语句以citylist.options 更改citylistcityList(Capital L)开头

届时将工作。

于 2011-05-06T20:27:39.413 回答
1

只有两件事:

  • 您需要 document.forms.selectionForm,表格在该集合中

  • 脚本的写法,必须放在页面标签之后,因为它会立即尝试访问它

无需其他更改。

于 2011-05-06T20:31:02.557 回答