You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

下拉选择列表优化:默认提示显示与联动重置问题

问题说明
  • 选择Country(select1)后,State(select2)需默认显示“Select State”而非直接展示选项;选择State(select2)后,City(select3)需默认显示“Select City”而非直接展示选项。
  • 当已选中的State(select2)被取消选择或切换为其他州时,City(select3)需重置为显示“Select City”;同理,当已选中的Country被取消选择或切换为其他国家时,State(select2)需重置为显示“Select State”,同时City(select3)也要重置为“Select City”。

当前代码

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<select name="select1" id="select1">
  <option value="">Select Country</option>
  <option value="india">India</option>
  <option value="america">America</option>
</select>

<select name="select2" id="select2" style="inline">
  <option value="">Select State</option>
  <option data-value="india" value="orissa">Orissa</option>
  <option data-value="india" value="telangan">Telangan</option>
  <option data-value="america" value="usa">USA</option>
  <option data-value="america" value="america">California</option>
</select>

<select name="select3" id="select3" style="inline">
  <option value="">Select city</option>
  <option data-value="orissa">Nal</option>
  <option data-value="orissa">Mir</option>
  <option data-value="telangan">Hyd</option>
  <option data-value="telangan">Vija</option>
  <option data-value="usa">ttt</option>
  <option data-value="usa">ttt</option>
  <option data-value="america">KRK</option>
  <option data-value="america">MRK</option>
</select>

JavaScript

$(function() {
  $("#select1").change(function() {
    if ($(this).data('options') == undefined) {
      $(this).data('options', $('#select2 option').clone());
    }
    var id = $(this).val();
    if (id == "") {
      $('#select2').val('');
      $('#select3').val('');
      return;
    }
    var options = $(this).data('options').filter('[data-value=' + id + ']');
    $('#select2').html(options).show();
  });

  $("#select2").change(function() {
    if ($(this).data('options') == undefined) {
      $(this).data('options', $('#select3 option').clone());
    }
    var id = $(this).val();
    if (id == "") {
      $('#select3').val('');
      return;
    }
    var options = $(this).data('options').filter('[data-value=' + id + ']');
    $('#select3').html(options).show();
  });
});

解决方案

修改后的JavaScript代码

$(function() {
  // 提前保存所有原始选项,避免重复克隆
  $("#select1").data('options', $('#select2 option').clone());
  $("#select2").data('options', $('#select3 option').clone());

  $("#select1").change(function() {
    var selectedCountry = $(this).val();
    var allStateOptions = $("#select1").data('options');
    
    if (selectedCountry === "") {
      // 重置State为所有原始选项并选中默认值
      $('#select2').html(allStateOptions).val('');
      // 重置City为所有原始选项并选中默认值
      $('#select3').html($("#select2").data('options')).val('');
      return;
    }
    
    // 筛选对应国家的州选项,拼接默认的Select State选项
    var filteredStates = allStateOptions.filter('[data-value=' + selectedCountry + ']');
    $('#select2').html($('<option value="">Select State</option>').add(filteredStates)).val('');
    // 重置City为仅显示默认提示
    $('#select3').html('<option value="">Select City</option>').val('');
  });

  $("#select2").change(function() {
    var selectedState = $(this).val();
    var allCityOptions = $("#select2").data('options');
    
    if (selectedState === "") {
      // 重置City为所有原始选项并选中默认值
      $('#select3').html(allCityOptions).val('');
      return;
    }
    
    // 筛选对应州的城市选项,拼接默认的Select City选项
    var filteredCities = allCityOptions.filter('[data-value=' + selectedState + ']');
    $('#select3').html($('<option value="">Select City</option>').add(filteredCities)).val('');
  });
});

修改要点

  1. 保留默认提示选项:每次筛选下级选项时,手动添加“Select State”/“Select City”默认选项,并设置选中值为空,确保默认显示提示文本。
  2. 完善层级重置逻辑:
    • 切换或取消Country选择时,恢复State的所有原始选项并重置选中状态,同时重置City的选项和选中状态。
    • 切换或取消State选择时,恢复City的所有原始选项并重置选中状态。
  3. 优化性能:提前在初始化阶段保存所有原始选项,避免每次触发change事件时重复克隆DOM元素。

内容的提问来源于stack exchange,提问作者FlyBoy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 07:55:29