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

jQuery技术问题:动态生成的下拉列表调用val()方法返回选项文本而非value属性值

问题根源:HTML Option的属性写错了!

嘿,这问题其实一眼就能揪出来——你在生成<option>标签的时候用了val属性,但标准HTML里option的有效值属性是value,不是val!

浏览器遇到不符合规范的属性时,会默认把option的文本内容当作它的value值,这就是为什么你用$("#province-select").val()拿到的是省份名称,而非缩写的原因。

解决步骤:

1. 修复populateList函数的属性名

把生成option代码里的val全部替换成标准的value,同时给属性值加上单引号包裹,避免特殊字符引发问题:

var populateList = function (list, element) { 
  element.append("<option value=''>Select...</option>") 
  list.forEach(function (val) { 
    element.append("<option value='" + val[0] + "'>" + val[1] + "</option>"); 
  }) 
}

2. 补全国家切换功能

既然你还没实现切换逻辑,这里给你封装一套清晰的处理代码:给#UserCountry绑定change事件,每次切换时先清空下拉列表,再重新填充对应国家的省/州数据:

<script> 
$(document).ready(function () { 
  // 封装加载省/州的逻辑
  function loadProvince(country) {
    $("#province-select").empty(); // 清空现有选项
    if (country == 'CA') { 
      populateList(canProvinces, $("#province-select")); 
    } else if (country == 'US') { 
      populateList(usaStates, $("#province-select")); 
    }
    $('#Province').val(''); // 重置隐藏输入框
  }

  // 页面初始化时加载默认国家的选项
  loadProvince($('#UserCountry').val());

  // 国家切换时重新加载省/州列表
  $('#UserCountry').on('change', function() {
    loadProvince($(this).val());
  });

  // 省/州选择时同步更新隐藏输入框
  $('#province-select').on('change', function () { 
    var selectedCode = $(this).val();
    console.log(selectedCode); // 现在会输出ON/QC这类缩写了!
    $('#Province').val(selectedCode); 
  }) 
}); 
</script>

👉 这里把老旧的bind方法换成了jQuery更推荐的on方法,同时把重复逻辑封装成函数,代码更易维护。

3. 验证修改效果

修改后生成的HTML option会变成标准格式:

<option value="ON">Ontario</option>

这时候再选择选项,$("#province-select").val()就会正确返回ON这类缩写,隐藏输入框也能同步拿到对应值了。

内容的提问来源于stack exchange,提问作者N.MORR

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 06:53:54