is_thinking 2015-08-07 07:34 采纳率: 66.7%
浏览 1604
已采纳

javascript选择框的问题

正确的代码如下,就是不理解为什么是options[length],

<html>
<head></head>
<title>省市县关联菜单</title>


<script>

function Dsy()
{
    this.Items = {};
}
Dsy.prototype.add = function(id,iArray)
{
    this.Items[id] = iArray;
}
Dsy.prototype.Exists = function(id)
{
    if(typeof(this.Items[id]) == "undefined") return false;
    return true;
}



var dsy = new Dsy();

dsy.add("0",["安徽","北京","福建"]);

dsy.add("0_0",["安庆","蚌埠","巢湖","池州","滁州","阜阳","合肥","淮北","淮南","黄山","六安","马鞍山","宿州","铜陵","芜湖","宣城","亳州"]);
dsy.add("0_0_0",["安庆市","怀宁县","潜山县","宿松县","太湖县","桐城市","望江县","岳西县","枞阳县"]);
dsy.add("0_0_1",["蚌埠市","固镇县","怀远县","五河县"]);
dsy.add("0_0_2",["巢湖市","含山县","和县","庐江县","无为县"]);

dsy.add("0_1",["北京"]);
dsy.add("0_1_0",["北京市","密云县","延庆县"]);

dsy.add("0_2",["福州","龙岩","南平","宁德","莆田","泉州","三明","厦门","漳州"]);
dsy.add("0_2_0",["长乐市","福清市","福州市","连江县","罗源县","闽侯县","闽清县","平潭县","永泰县"]);
dsy.add("0_2_1",["长汀县","连城县","龙岩市","上杭县","武平县","永定县","漳平市"]);
dsy.add("0_2_2",["光泽县","建阳市","建瓯市","南平市","浦城县","邵武市","顺昌县","松溪县","武夷山市","政和县"]);
dsy.add("0_2_3",["福安市","福鼎市","古田县","宁德市","屏南县","寿宁县","霞浦县","周宁县","柘荣县"]);

 function change(v){
    var str="0";
    alert(v);//一个
    for(i=0;i<v ;i++){ str+=("_"+(document.getElementById(s[i]).selectedIndex-1));};
    alert(str);//2个
    var ss=document.getElementById(s[v]);
    alert(ss.value);
    with(ss){
        length = 0;
        options[0]=new Option(opt0[v],opt0[v]);
        alert(options[0].value);//3个
        if(v && document.getElementById(s[v-1]).selectedIndex>0 || !v)
        {
            alert(v);//4个
            if(dsy.Exists(str)){
                ar = dsy.Items[str];
                alert(ar);
                for(i=0;i<ar.length;i++) {
                    options[length]=new Option(ar[i],ar[i]); //!!!!***********options[length]在这里
                }               
                if(v)options[1].selected = true;
            }
        }
        if(++v<s.length) 
        {
            change(v);
        }
    }
}

var s=["province","city","district"];
var opt0 = ["省份","地级市","市、县级市、县"];
function setup()
{
    for(i=0;i<s .length-1;i++)
        document.getElementById(s[i]).onchange=new Function("change("+(i+1)+")");
    change(0);
}
</script> 

<body bgcolor="#E0E0E0" onload="setup()">
多级关联菜单:
<form name="frm">
<select id="province"><option>省份</option></select>
<select id="city"><option>地级市</option></select>
<select id="district"><option>市、县级市、县</option></select>
</form>
</body>
</html>

请问各位老师,options[length] =new Option(ar[i],ar[i])这句话中为什么不是options[i]=new Option(ar[i],ar[i])?按照我的理解是,每一次for循环都新建了一个select选项,如果options[]里面是length的话,那么每次都新建的是options最后一个选项,而没有建前面的那几个。麻烦哪位老师解释一下,或者指点一下options[]真正的含义,是不是我对着它有错误的理解。还有with()的作用是什么?谢谢。

  • 写回答

3条回答 默认 最新

  • lhl_lqc 2015-08-07 08:25
    关注

    由于这个函数使用了坑爹坑妹坑X大爷的with语句,导致读起来不是很好理解。强烈建议你去掉with语句,这样代码不至于乍看起来不知所云。讲一下原理:在with中,定义的变量可以不加对象的引用,比如这里直接引用了ss对象的length属性.....那个length的意思其实应该是ss.length,options的意思其实是ss.options,而ss.length是一个变化的值,所以每一次给options赋值之后ss.length会发生变化,即在for循环中的options[lenth]表示ss.options[ss.length]。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?