省份再每一次onchange后,总会重新添加一遍,是什么原因呢?

省份再每一次onchange后,总会重新添加一遍,是什么原因呢?

function address(){

    var province=['北京市','天津市','河北省','河南省'];

    var cities=['朝阳区','西青区','武清区','石家庄','邯郸市','郑州市','开封市'];

    var prov=document.getElementById('province');

    var city=document.getElementById('city');

    selectAdd(prov,province,province);

    selectAdd(city,cities,cities);    

    

}

function selectAdd(obj,name,value){

    for(var i=0i<name.lengthi++){

        obj.options.add(new Option(name[i],name[i]));

    }

}

function linkage(){

      var prov=document.getElementById('province');

      var city=document.getElementById('city');

      var province=['北京市','天津市','河北省','河南省'];

      var cities=new Array();

      var shen=document.list.province.value;

          if(shen=='北京市'){

            cities=['朝阳区'];    

          }else if(shen=='天津市'){

            cities=['西青区','武青区'];

          }else if(shen=='河南省'){

            cities=['郑州市','开封市'];     

          }else if(shen=='河北省'){

            cities=['石家庄','邯郸市'];

          }     

        

        city.options.length=0;

        selectAdd(prov,province,province);

        selectAdd(city,cities,cities); 


    

     

    

}  

    

  

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>Document</title>

    <script type="text/javascript" src="index.js"></script>

</head>

<body onload="address()">

    <form name="list">

         省份:

        <select name="province" id="province" onchange="linkage()"></select>

         市/区:

        <select name="city" id="city"></select>

    </form>

</body>

</html>


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕阿园 2021-10-29 15:15:04

同学你好,因为每onchange后都会调用一次如下方法,所以内容每改变一次都会在后面添加一次,同学将该代码注释后试试

https://img1.sycdn.imooc.com//climg/617b9cc809dc15a903520168.jpg

祝学习愉快~

  • 提问者 晓舟 #1

    我之前的理解是这句代码会把整个数组 var province=['北京市','天津市','河北省','河南省'] 通过调用selectAdd函数再重置一遍,从页面显示结果看,好像是在之前的数组末尾又继续添加了一遍,这是什么原因呢?



    2021-10-29 15:22:20
  • 好帮手慕阿园 回复 提问者 晓舟 #2

    同学你好,并不是重置哦,该方法中并没有重置的方法,所以每调用一次都会继续添加一遍的

    祝学习愉快~

    2021-10-29 17:16:28
  • 提问者 晓舟 回复 好帮手慕阿园 #3

     var prov=document.getElementById('province');

      var province=['北京市','天津市','河北省','河南省'];

      selectAdd(prov,province,province);

    function selectAdd(obj,name,value){

        for(var i=0; i<name.length; i++){

            obj.options.add(new Option(name[i],name[i]));

        }

    }

    这个数组从上面代码执行顺序来看,很像是从0的位置一致添加到河南省那个元素结束 >_<#

    那之前的数组不会在触发onchange="linkage()"时又从0的位置重置了一遍吗?为什么是在数组的末端添加元素呢?这里有点费解


    2021-10-29 18:17:59
晓舟 提问者 2021-10-29 15:03:03

我想应该是触发onchange以后,会在同名数组后再接着添加数组元素?

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师