所以我要进行两个下拉菜单。一个依赖于另一个,如在第一个下拉列表中选择一个选项时,另一个中的值应更改。我正在使用Symfony3.4渲染我的表单,所以我对此没有太多控制。 (我认为我不能在其中添加动态类名/值名)。如果相关,我正在使用Bulma CSS框架。

这是我的选择框的外观:

状态:

<select name="state" id="stateSelect">
   <option value="1">Lagos</option>
   <option value="2">Abuja</option>
   <option value="3">Rivers</option>
   <option value="4">Ogun</option>
   <option value="5">Oyo</option>
   <option value="6">Anambra</option>
   <option value="7">Enugu</option>
   <option value="8">Akwa Ibom</option>
   <option value="9">Adamawa</option>
   ...
   <option value="37">Zamfara</option>
</select>


LGA(地方政府区域):

<select id="lgaSelect" name="areas_registration[lga]">
   <optgroup label="Lagos">
      <option value="1">Abule Egba</option>
      <option value="2">Agege</option>
      <option value="3">Ajah</option>
      <option value="4">Alimosho</option>
      <option value="5">Amuwo Odofin</option>
      ...
   </optgroup>
   <optgroup label="Abuja">
      <option value="38">Apo</option>
      <option value="39">Asokoro</option>
      <option value="40">Central Area</option>
      <option value="41">Chika</option>
      <option value="42">Dakibiyu</option>
      ...
   </optgroup>
   ....35 more optgroups
</select>


我的目标是,当用户从“状态”下拉列表中选择一个选项时,LGA下拉列表应仅具有与所选状态相关的选项。我为此使用optgroup标签。我在JavaScript中尝试的是,在页面加载时,我克隆了LGA下拉列表,将其隐藏,将其称为lgaSelectSeed并将其用于播种原始LGA下拉列表:(#hiddenLgas只是一个空div)

$(function () {
    var stateSelect = $("#stateSelect") || null;
    var lgaSelect = $("#lgaSelect") || null;
    var hiddenLga = $("#hiddenLgas") || null;
    $(hiddenLga).html(lgaSelect.clone().prop('id', 'lgaSelectSeed'));
    stateSelect.change(function () {
        var select_class = $(this).find('option:selected').text();
        var options = $(lgaSelectSeed).find('optgroup[label="' + select_class + '"]');
        $(lgaSelect).html(options.children());
    }


这可行,但是其中有一个错误。如果在状态下拉列表中选择随机选项,然后向上选择Lagos或Abuja,则LGA下拉列表将变为空白。我一直在努力弄清楚为什么会发生这种情况,但仍然无法解决。是否有任何jQuery插件来处理呢?

演示:https://jsfiddle.net/gafyvbL9/

如何复制错误:在状态下拉列表(左)中,选择拉各斯。然后选择Anambra。然后再次选择拉各斯,然后选择Anambra。您会看到LGA下拉列表(右侧)为空。为什么会这样呢?提前致谢

最佳答案

复制存储的选项,这样就不会从$(hiddenLga)中删除​​原始文件

更改:

$(lgaSelect).html(options.children());




$(lgaSelect).html(options.children().clone());

10-07 14:41