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

jQuery级联依赖下拉框中District无法显示选中值的问题如何解决

问题根因

你的代码核心问题是异步请求时序不匹配:

  • 调用$("#state").val(studData.state_id).change()触发拉取District列表的axios异步请求,该请求不会阻塞后续代码执行
  • 后续$("#dist").val(studData.district_id)执行时,District的选项还没被接口返回数据渲染到DOM里,自然无法匹配到对应值完成选中
    另外你的代码还存在一个小缺陷:每次切换State时没有清空旧的District选项,会导致不同State的District选项累加。
修复方案

步骤1:改造getDist函数,返回Promise支持异步等待,同时新增预设District值的传参

const getDist = (state, defaultDistId = null) => {
  // 先清空原有District选项,避免累加
  $('#dist').html('<option value="" hidden>Select District</option>');
  return axios.get(`${url}district?id=${state}`)
    .then(function(res) {
      if (res.data.status == 'success') {
        res.data.result.map((e) => {
          $('#dist').append(`<option value="${e.dist_id}" >${e.dist_name}</option>`);
        });
        // 选项渲染完成后,如果有传入默认值,直接设置选中
        if (defaultDistId) {
          $("#dist").val(defaultDistId).change();
        }
      }
    });
}

步骤2:修改Promise.all回调逻辑,不要直接给District赋值,把默认District值传给getDist

Promise.all([getState(), getDetails(student)])
  .then(function(results) {
    const state = results[0];
    const student = results[1];
    let studData = null;

    if (state.data.status == 'success') {
      state.data.result.map((e) => {
        $('#state').append(`<option value="${e.st_id}">${e.st_name}</option>`);
      });
    }

    if (student.data.status == 'success') {
      studData = student.data.result;
      // 设置State选中后,直接调用getDist并传入要预设的District ID
      $("#state").val(studData.state_id);
      getDist(studData.state_id, studData.district_id);
    }
  });

步骤3:保留原有State的change事件逻辑(不需要传默认值即可)

$(document).ready(function() {
  $("#state").change(function() {
    let stateID = $(this).val();
    // 普通切换State时不需要预设值,只传stateID即可
    getDist(stateID);
  });
});

HTML部分不需要修改,修改后会等District的所有选项渲染完成后再执行赋值操作,就能正常匹配到对应选项完成选中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:27:05