当前位置: 首页 > 知识库问答 >
问题:

如何用JQuery填充级联下拉列表

方承弼
2023-03-14

我有以下问题:

我开始用HTML和JS创建一个表单,有两个下拉列表(Country和City)。现在我想用JQuery使这两个动态化,以便只有所选国家的城市可见。

我已经开始了一些基本的JS,它们工作得很好,但在IE中有些麻烦。现在我正在尝试将我的JS转换为JQuery以获得更好的兼容性。

我原来的JS是这样的:

function populate(s1, s2) {
    var s1 = document.getElementById(s1);
    var s2 = document.getElementById(s2);
    s2.innerHTML = "";
    if (s1.value == "Germany") {
        var optionArray = ["|", "magdeburg|Magdeburg", "duesseldorf|Duesseldorf", "leinfelden-echterdingen|Leinfelden-Echterdingen", "eschborn|Eschborn"];
    } else if (s1.value == "Hungary") {
        var optionArray = ["|", "pecs|Pecs", "budapest|Budapest", "debrecen|Debrecen"];
    } else if (s1.value == "Russia") {
        var optionArray = ["|", "st. petersburg|St. Petersburg"];
    } else if (s1.value == "South Africa") {
        var optionArray = ["|", "midrand|Midrand"];
    } else if (s1.value == "USA") {
        var optionArray = ["|", "downers grove|Downers Grove"];
    } else if (s1.value == "Mexico") {
        var optionArray = ["|", "puebla|Puebla"];
    } else if (s1.value == "China") {
        var optionArray = ["|", "beijing|Beijing"];
    } else if (s1.value == "Spain") {
        var optionArray = ["|", "barcelona|Barcelona"];
    }

    for (var option in optionArray) {
        var pair = optionArray[option].split("|");
        var newOption = document.createElement("option");
        newOption.value = pair[0];
        newOption.innerHTML = pair[1];
        s2.options.add(newOption);
    }
};

下面是我的jQuery:

http://jsfiddle.net/hvxsz/

我知道这很简单,但我只见树木不见森林。

共有3个答案

益绯辞
2023-03-14

我已经为国家,州,城市和Zip创建了级联下拉列表

它可能对某人有帮助。这里只发布了部分代码,您可以在JSFiddle上看到完整的工作示例。

//Get html elements
var countySel = document.getElementById("countySel");
var stateSel = document.getElementById("stateSel"); 
var citySel = document.getElementById("citySel");
var zipSel = document.getElementById("zipSel");

//Load countries
for (var country in countryStateInfo) {
    countySel.options[countySel.options.length] = new Option(country, country);
}

//County Changed
countySel.onchange = function () {

     stateSel.length = 1; // remove all options bar first
     citySel.length = 1; // remove all options bar first
     zipSel.length = 1; // remove all options bar first

     if (this.selectedIndex < 1)
         return; // done

     for (var state in countryStateInfo[this.value]) {
         stateSel.options[stateSel.options.length] = new Option(state, state);
     }
}

小提琴演示

卓俊晖
2023-03-14

我将提供第二个解决方案,因为这篇文章仍然在谷歌搜索'jQueryCascadeSelect'中。这是第一个选择:

<select class="select" id="province" onchange="filterCity();">
  <option value="1">RM</option>
  <option value="2">FI</option>
</select>

这是第二个,在选择第一个之前禁用:

<select class="select" id="city" disabled>
  <option data-province="RM" value="1">ROMA</option>
  <option data-province="RM" value="2">ANGUILLARA SABAZIA</option>
  <option data-province="FI" value="3">FIRENZE</option>
  <option data-province="FI" value="4">PONTASSIEVE</option>
</select>

此选项是不可见的,它充当由所选内容筛选出的所有元素的容器:

<span id="option-container" style="visibility: hidden; position:absolute;"></span>

最后,筛选的脚本:

<script>

    function filterCity(){
      var province = $("#province").find('option:selected').text(); // stores province
      $("#option-container").children().appendTo("#city"); // moves <option> contained in #option-container back to their <select>
      var toMove = $("#city").children("[data-province!='"+province+"']"); // selects city elements to move out
      toMove.appendTo("#option-container"); // moves city elements in #option-container
      $("#city").removeAttr("disabled"); // enables select
};
</script>
谢飞舟
2023-03-14

应该是这么简单的

jQuery(function($) {
    var locations = {
        'Germany': ['Duesseldorf', 'Leinfelden-Echterdingen', 'Eschborn'],
        'Spain': ['Barcelona'],
        'Hungary': ['Pecs'],
        'USA': ['Downers Grove'],
        'Mexico': ['Puebla'],
        'South Africa': ['Midrand'],
        'China': ['Beijing'],
        'Russia': ['St. Petersburg'],
    }

    var $locations = $('#location');
    $('#country').change(function () {
        var country = $(this).val(), lcns = locations[country] || [];

        var html = $.map(lcns, function(lcn){
            return '<option value="' + lcn + '">' + lcn + '</option>'
        }).join('');
        $locations.html(html)
    });
});

演示:小提琴

 类似资料:
  • 问题内容: 我有以下问题: 我开始用HTML和JS创建表单,并且有两个下拉菜单(国家和城市)。现在,我想使用JQuery使这两个动态,以便仅显示所选国家/地区的城市。 我从一些基本的JS入手,但效果不错,但在IE中却有些麻烦。现在,我正在尝试将JS转换为JQuery,以获得更好的兼容性。 我原来的JS看起来像这样: 我知道这很简单,但是我看不到树木的木头。 问题答案: 它应该像

  • 问题内容: 我已经使用mvc进行了级联淹没。就像这样,如果您在第一个下拉列表中选择一个国家,则应该相应地填充第二个国家的状态。 此刻,一切似乎都很好,我得到了Json的响应(使用F12工具看到了它),它看起来像 我想知道如何用这些数据填充我的数据。我的第二个下拉菜单的ID是“ ”。任何帮助将不胜感激。 以下是用于从服务器生成JSON响应的代码: 下面是客户端HTML,我的剃刀代码和我的脚本。我想在

  • 问题内容: 我正在开发一个国家/地区级联下拉列表…我基于返回了json结果,但我不知道如何在新的下拉列表框中填充/填充它。 这是我正在使用的 警报给了这个 我的aspx页面上有这个 关于如何填充下拉菜单的任何建议… 编辑: 当我通过萤火虫检查时,我收到了有关ajax帖子的回复, 问题答案: 例

  • 问题内容: 我有以下jQuery代码。我可以从server获得以下数据。我该如何对此进行迭代,并用 另外,使用和之间有什么区别。 问题答案: 这应该可以解决问题: 这里的区别和(从jQuery的文档): [getJSON]是Ajax的简写功能,等效于: 编辑:要明确,部分问题是服务器的响应返回的是如下所示的json对象: …因此该属性需要使用手动解析。

  • 问题内容: 就像标题中所说的那样,尽管我对尚未付诸实践的理论很熟悉,但我仍在尝试使用jQuery,JSON和AJAX创建下拉菜单,因此,任何建议,演示代码段或教程都将不胜感激,因为我想开始最好的开始! 提前感谢! 问题答案: 您需要执行$ .getJSON调用以从document.load或其他一些事件http://api.jquery.com/jQuery.getJSON/上的服务器中获取jso

  • 问题内容: 我的数据库包含国家和城市。 第一种情况-成功完成: 国家列表在页面加载的下拉框中填充 城市列表将在页面加载的下拉框中填充-填充的城市列表基于默认国家/地区。 第二种情况-无法成功: 用户更改国家 城市列表将根据所选国家/地区更改 我知道我必须使用jQuery / Ajax。我尝试过,但是由于缺乏编程经验,我无法解决问题。我的列表是从数据库而不是XML获取的。我只需要一个快速的解决方案,

  • 问题内容: 我设法用json对象填充下拉菜单,效果很好。目前,我正在尝试根据从下拉菜单中选择的选项显示隐藏div中的图像。当下拉列表由json对象填充时,我将如何检索图像数据。 HTML JSON文件 这就是我使用jquery填充下拉菜单的方式。 jfiddle中任何有效的示例,将不胜感激!谢谢。 问题答案: 现场演示

  • 问题内容: 我有以下代码以生成级联下拉列表,但是由于某种原因,ajax发布无法正常工作。我可以获取它以填充状态列表,当我选择一个状态时,我会向我显示正确的值,但是当需要发布到fetch_state.php时,它似乎发布了null。有人可以帮我解释为什么这样做吗? 这是下面的代码 fetch_state.php 我不断收到错误 问题答案: 首先,将您更改为 然后用引号引起来 同时,把块出来的,只是有