当前位置:Gxlcms > JavaScript > 基于JS实现省市联动效果代码分享

基于JS实现省市联动效果代码分享

时间:2021-07-01 10:21:17 帮助过:4人阅读

在日常项目开发阶段经常见到下拉框二级联动效果,尤其是涉及地区、品种等有多级选项时。比如说:常见的省市联动下拉框,在选择省份时,城市列表也会更随改变。

思路:

1,所谓联动效果,是指出发父级的数据变化时,会影响到关联性子级数据元素的变化。

下面是造的省市的数据:

  1. var linkDatas = {
  2. provinces:[
  3. {
  4. "code":"0",
  5. "name":"请选择"
  6. },
  7. {
  8. "code":"1",
  9. "name":"北京"
  10. },
  11. {
  12. "code":"2",
  13. "name":"天津"
  14. },
  15. {
  16. "code":"3",
  17. "name":"河北"
  18. },
  19. {
  20. "code":"4",
  21. "name":"湖北"
  22. },
  23. {
  24. "code":"5",
  25. "name":"广东"
  26. },
  27. {
  28. "code":"6",
  29. "name":"其他"
  30. }
  31. ],
  32. citys:{
  33. 0:[
  34. "请选择"
  35. ],
  36. 1:[
  37. "朝阳区",
  38. "海淀区",
  39. "东城区",
  40. "西城区",
  41. "房山区",
  42. "其他"
  43. ],
  44. 2:[
  45. "天津"
  46. ],
  47. 3:[
  48. "沧州",
  49. "石家庄",
  50. "秦皇岛",
  51. "其他"
  52. ],
  53. 4:[
  54. "武汉市",
  55. "宜昌市",
  56. "襄樊市",
  57. "其他"
  58. ],
  59. 5:[
  60. "广州市",
  61. "深圳市",
  62. "汕头市",
  63. "佛山市",
  64. "珠海市",
  65. "其他"
  66. ],
  67. 6:[
  68. "其他"
  69. ]
  70. }
  71. };

2,根据数据动态生成option节点:

  1. function addOptions(target,options){
  2. var optionEle = null,
  3. target = target,
  4. option = options,
  5. optionLen = options.length;
  6. for(var i = 0;i < optionLen;i++){
  7. optionEle = document.createElement('option');
  8. optionEle.value = option[i].value;
  9. optionEle.text = option[i].text;
  10. target.options.add(optionEle);
  11. }
  12. }

3,根据上述省市数据,其中code代表“省级”指向“城市”的标识符,当省级的数据变更时,出发change事件:

  1. pro.onchange = function(){
  2. console.log(this);
  3. var ct = city[this.value],
  4. ctLen = ct.length,
  5. ctBox = [];
  6. c.innerHTML = "";
  7. /*添加城市*/
  8. for(var j = 0;j < ctLen;j++){
  9. ctBox.push({
  10. "text" : ct[j],
  11. "value": ct[j]
  12. });
  13. }
  14. addOptions(c,ctBox);
  15. }

HTML代码:

  1. <div class="content">
  2. <h3>下拉框联动效果</h3>
  3. <p>省份:
  4. <select name="provinces" id="provinces">
  5. </select>
  6. </p>
  7. <p>
  8. 市:
  9. <select name="citys" id="citys">
  10. </select>
  11. </p>
  12. </div>

全部JavaScript代码:

  1. var linkDatas = {
  2. provinces:[
  3. {
  4. "code":"0",
  5. "name":"请选择"
  6. },
  7. {
  8. "code":"1",
  9. "name":"北京"
  10. },
  11. {
  12. "code":"2",
  13. "name":"天津"
  14. },
  15. {
  16. "code":"3",
  17. "name":"河北"
  18. },
  19. {
  20. "code":"4",
  21. "name":"湖北"
  22. },
  23. {
  24. "code":"5",
  25. "name":"广东"
  26. },
  27. {
  28. "code":"6",
  29. "name":"其他"
  30. }
  31. ],
  32. citys:{
  33. 0:[
  34. "请选择"
  35. ],
  36. 1:[
  37. "朝阳区",
  38. "海淀区",
  39. "东城区",
  40. "西城区",
  41. "房山区",
  42. "其他"
  43. ],
  44. 2:[
  45. "天津"
  46. ],
  47. 3:[
  48. "沧州",
  49. "石家庄",
  50. "秦皇岛",
  51. "其他"
  52. ],
  53. 4:[
  54. "武汉市",
  55. "宜昌市",
  56. "襄樊市",
  57. "其他"
  58. ],
  59. 5:[
  60. "广州市",
  61. "深圳市",
  62. "汕头市",
  63. "佛山市",
  64. "珠海市",
  65. "其他"
  66. ],
  67. 6:[
  68. "其他"
  69. ]
  70. }
  71. };
  72. function addOptions(target,options){
  73. var optionEle = null,
  74. target = target,
  75. option = options,
  76. optionLen = options.length;
  77. for(var i = 0;i < optionLen;i++){
  78. optionEle = document.createElement('option');
  79. optionEle.value = option[i].value;
  80. optionEle.text = option[i].text;
  81. target.options.add(optionEle);
  82. }
  83. }
  84. function provincesCitysLink(pro,c){
  85. var LD = linkDatas,
  86. provinces = LD.provinces,
  87. city = LD.citys,
  88. initCity = city[0],
  89. proBox = [];
  90. /*添加省份*/
  91. for(var i = 0;i < provinces.length;i++){
  92. proBox.push({
  93. "text" : provinces[i].name,
  94. "value": provinces[i].code
  95. })
  96. }
  97. addOptions(pro,proBox);
  98. /*初始化城市*/
  99. addOptions(c,[{
  100. "text" : initCity,
  101. "value": initCity
  102. }]);
  103. /*添加联动事件*/
  104. pro.onchange = function(){
  105. console.log(this);
  106. var ct = city[this.value],
  107. ctLen = ct.length,
  108. ctBox = [];
  109. c.innerHTML = "";
  110. /*添加城市*/
  111. for(var j = 0;j < ctLen;j++){
  112. ctBox.push({
  113. "text" : ct[j],
  114. "value": ct[j]
  115. });
  116. }
  117. addOptions(c,ctBox);
  118. }
  119. }
  120. var provinces = document.getElementById('provinces'),
  121. citys = document.getElementById('citys');
  122. provincesCitysLink(provinces,citys);

人气教程排行